public class Euler745 {
    static final long kMod = 1000000007L;

    public static String solve() {
        long N = 100000000000000L;

        long root = (long) Math.sqrt(N);
        while ((root + 1L) * (root + 1L) <= N) {
            root++;
        }
        while (root * root > N) {
            root--;
        }

        int iRoot = (int) root;

        long[] j2 = new long[iRoot + 1];
        for (int i = 1; i <= iRoot; ++i) {
            j2[i] = (long) i * i;
        }

        byte[] composite = new byte[iRoot + 1];
        for (int p = 2; p <= iRoot; ++p) {
            if (composite[p] != 0) {
                continue;
            }
            long p2 = (long) p * p;
            for (int m = p; m <= iRoot; m += p) {
                composite[m] = 1;
                j2[m] = (j2[m] / p2) * (p2 - 1L);
            }
        }

        long answer = 0L;
        for (int m = 1; m <= iRoot; ++m) {
            long m2 = (long) m * m;
            long count = N / m2;
            long add = ((j2[m] % kMod) * (count % kMod)) % kMod;
            answer += add;
            if (answer >= kMod) {
                answer -= kMod;
            }
        }

        return Long.toString(answer);
    }

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