public class Euler421 {
    public static String solve() {
        long N = 100_000_000_000L;
        int M = 100_000_000;
        boolean[] sieve = new boolean[M + 1];
        java.util.Arrays.fill(sieve, true);
        sieve[0] = sieve[1] = false;
        for (int p = 2; (long) p * p <= M; p++)
            if (sieve[p])
                for (int q = p * p; q <= M; q += p)
                    sieve[q] = false;
        long total = 0;
        for (int p = 2; p <= M; p++) {
            if (!sieve[p])
                continue;
            int d = gcd(15, p - 1);
            long r = primRootOfUnity(p, d);
            long h = p - 1;
            for (int i = 0; i < d; i++) {
                h = h * r % p;
                total += ((N + p - h) / p) * p;
            }
        }
        return String.valueOf(total);
    }

    static int gcd(int a, int b) {
        while (b != 0) {
            int t = b;
            b = a % b;
            a = t;
        }
        return a;
    }

    static long primRootOfUnity(int p, int d) {
        if (d == 1)
            return 1;
        for (int a = 2; a < p; a++) {
            long h = modPow(a, (p - 1) / d, p);
            long z = 1;
            boolean ok = true;
            for (int i = 1; i < d; i++) {
                z = z * h % p;
                if (z == 1) {
                    ok = false;
                    break;
                }
            }
            if (ok)
                return h;
        }
        return 1;
    }

    static long modPow(long b, long e, long m) {
        long r = 1;
        b %= m;
        while (e > 0) {
            if ((e & 1) != 0)
                r = r * b % m;
            b = b * b % m;
            e >>= 1;
        }
        return r;
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
