import java.util.ArrayList;
import java.util.List;

public class Euler484 {

    private static List<Long> primes = new ArrayList<>();
    private static List<Long> p2 = new ArrayList<>();

    private static void generatePrimesUpto(int limit) {
        byte[] isComp = new byte[limit + 1];
        for (int i = 2; i <= limit; ++i) {
            if (isComp[i] == 0) {
                primes.add((long) i);
                p2.add((long) i * i);
                if ((long) i * i <= limit) {
                    for (long j = (long) i * i; j <= limit; j += i) {
                        isComp[(int) j] = 1;
                    }
                }
            }
        }
    }

    private static long dfsAlt(int i0, long L0) {
        long res = 0;
        for (int i = i0; i < primes.size(); ++i) {
            long q = p2.get(i);
            long L = L0 / q;
            if (L == 0)
                break;

            long p = primes.get(i);
            long e = 1;
            long g = 1;
            while (L > 0) {
                long gp = g;
                e++;
                if (e != 1) {
                    if (e == p) {
                        g *= q;
                        e = 0;
                    } else {
                        g *= p;
                    }
                    long c = g - gp;
                    res += c * L;
                    if (L > q) {
                        res += c * dfsAlt(i + 1, L);
                    }
                }
                L /= p;
            }
        }
        return res;
    }

    private static long computeSumAlt(long L) {
        int limit = (int) Math.sqrt(L);
        generatePrimesUpto(limit);
        return L + dfsAlt(0, L);
    }

    public static void main(String[] args) {
        long N = 5000000000000000L;
        long total = computeSumAlt(N);
        if (total > 0) {
            total -= 1;
        }
        System.out.println(total);
    }
}
