public class Euler549 {
    static int vpFact(long n, int p) {
        int s = 0;
        while (n > 0) {
            n /= p;
            s += n;
        }
        return s;
    }

    static int minM(int p, int exp) {
        int lo = 1, hi = p * exp;
        while (lo < hi) {
            int mid = (lo + hi) / 2;
            if (vpFact(mid, p) >= exp)
                hi = mid;
            else
                lo = mid + 1;
        }
        return lo;
    }

    public static void main(String[] args) {
        int N = 100000000;
        boolean[] isComp = new boolean[(N / 2) + 1];
        int r = (int) Math.sqrt(N);
        for (int i = 1; 2 * i + 1 <= r; i++) {
            if (isComp[i])
                continue;
            int p = 2 * i + 1;
            int start = (p * p - 1) / 2;
            for (int j = start; j <= N / 2; j += p)
                isComp[j] = true;
        }
        int[] primes = new int[6000000];
        int pc = 0;
        primes[pc++] = 2;
        for (int i = 1; i <= N / 2; i++)
            if (!isComp[i])
                primes[pc++] = 2 * i + 1;

        int[] s = new int[N + 1];
        for (int pi = 0; pi < pc; pi++) {
            int p = primes[pi];
            for (int k = p; k <= N; k += p)
                if (s[k] < p)
                    s[k] = p;
            long q = (long) p * p;
            int exp = 2;
            while (q <= N) {
                int m = minM(p, exp);
                int qq = (int) q;
                for (int k = qq; k <= N; k += qq)
                    if (s[k] < m)
                        s[k] = m;
                if (q > (long) N / p)
                    break;
                q *= p;
                exp++;
            }
        }
        long sum = 0;
        for (int i = 2; i <= N; i++)
            sum += s[i];
        System.out.println(sum);
    }
}
