package main
import (
"fmt"
"math"
)
func main() {
var n, A, B, C, D uint32
_, err := fmt.Scan(&n, &A, &B, &C, &D)
if err != nil {
return
}
if n <= 1 {
fmt.Println(0)
return
}
limit := int(math.Sqrt(float64(n)))
smallIsPrime := make([]bool, limit+1)
for i := 2; i <= limit; i++ {
smallIsPrime[i] = true
}
var primes []uint32
for p := 2; p <= limit; p++ {
if smallIsPrime[p] {
primes = append(primes, uint32(p))
for i := p * p; i <= limit; i += p {
smallIsPrime[i] = false
}
}
}
var ans uint32 = 0
if n >= 2 {
var p uint32 = 2
fp := A*p*p*p + B*p*p + C*p + D
count := uint32(0)
for nn := n / p; nn > 0; nn /= p {
count += nn
}
ans += fp * count
}
const S = 1 << 18
block := make([]uint64, S/64)
for L := uint32(3); L <= n; L += S * 2 {
R := L + S*2 - 1
if R > n {
R = n
}
for i := range block {
block[i] = 0
}
for _, p := range primes {
if p == 2 {
continue
}
start := (L + p - 1) / p * p
if start%2 == 0 {
start += p
}
if start < p*p {
start = p * p
}
for i := start; i <= R; i += 2 * p {
idx := (i - L) / 2
block[idx/64] |= uint64(1) << (idx % 64)
}
}
for i := uint32(0); i <= (R-L)/2; i++ {
if (block[i/64] & (uint64(1) << (i % 64))) == 0 {
p := L + 2*i
fp := A*p*p*p + B*p*p + C*p + D
count := uint32(0)
for nn := n / p; nn > 0; nn /= p {
count += nn
}
ans += fp * count
}
}
}
fmt.Println(ans)
}