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

public class Euler530 {

    static long isqrt(long x) {
        if (x == 0)
            return 0;
        long r = (long) Math.sqrt(x);
        while ((r + 1) * (r + 1) <= x)
            r++;
        while (r * r > x)
            r--;
        return r;
    }

    static long icbrt(long x) {
        if (x == 0)
            return 0;
        long r = (long) Math.cbrt(x);
        while ((r + 1) * (r + 1) * (r + 1) <= x)
            r++;
        while (r * r * r > x)
            r--;
        return r;
    }

    static long divisorSummatory(long n) {
        long res = 0;
        for (long l = 1; l <= n;) {
            long q = n / l;
            long r = n / q;
            res += q * (r - l + 1);
            l = r + 1;
        }
        return res;
    }

    static class Part1Group {
        long v;
        long sumPhi;

        Part1Group(long v, long sumPhi) {
            this.v = v;
            this.sumPhi = sumPhi;
        }
    }

    public static void main(String[] args) {
        long N = 1000000000000000L;
        long limit = isqrt(N);
        long K = icbrt(N);

        int[] phi = new int[(int) limit + 1];
        for (int i = 0; i <= limit; i++)
            phi[i] = i;
        if (limit >= 1)
            phi[1] = 1;

        for (int p = 2; p <= limit; p++) {
            if (phi[p] == p) {
                for (int m = p; m <= limit; m += p) {
                    phi[m] -= phi[m] / p;
                }
            }
        }

        long[] phiPrefix = new long[(int) limit + 1];
        long sum = 0;
        for (int i = 1; i <= limit; i++) {
            sum += phi[i];
            phiPrefix[i] = sum;
        }

        long maxSmall = N / (K * K);
        int[] tau = new int[(int) maxSmall + 1];
        for (int d = 1; d <= maxSmall; d++) {
            for (int m = d; m <= maxSmall; m += d) {
                tau[m]++;
            }
        }

        long[] DSmall = new long[(int) maxSmall + 1];
        sum = 0;
        for (int i = 1; i <= maxSmall; i++) {
            sum += tau[i];
            DSmall[i] = sum;
        }

        List<Part1Group> groups = new ArrayList<>();
        long t = 1;
        while (t <= K) {
            long v = N / (t * t);
            if (v == 0)
                break;
            long r = isqrt(N / v);
            if (r > K)
                r = K;
            long sumPhi = phiPrefix[(int) r] - phiPrefix[(int) (t - 1)];
            groups.add(new Part1Group(v, sumPhi));
            t = r + 1;
        }

        long ansPart1 = groups.parallelStream().mapToLong(g -> {
            return g.sumPhi * divisorSummatory(g.v);
        }).sum();

        long ansPart2 = 0;
        for (int i = (int) (K + 1); i <= limit; i++) {
            long v = N / ((long) i * i);
            ansPart2 += (long) phi[i] * DSmall[(int) v];
        }

        System.out.println(ansPart1 + ansPart2);
    }
}
