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

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

    public static String solve() {
        int N = 10000000;
        int[] phi = new int[N + 1];
        List<Integer> primes = new ArrayList<>(N / 10);

        phi[1] = 1;
        for (int i = 2; i <= N; ++i) {
            if (phi[i] == 0) {
                phi[i] = i - 1;
                primes.add(i);
            }
            for (int p : primes) {
                long v = (long) i * p;
                if (v > N)
                    break;
                if (i % p == 0) {
                    phi[(int) v] = phi[i] * p;
                    break;
                }
                phi[(int) v] = phi[i] * (p - 1);
            }
        }

        int[] pow2 = new int[N + 1];
        pow2[0] = 1;
        for (int i = 1; i <= N; ++i) {
            pow2[i] = (int) (((long) pow2[i - 1] * 2) % kMod);
        }

        long ans = (2L * N) % kMod;

        for (int h = 2; h <= N; ++h) {
            long coeff;
            if ((h & 1) == 0) {
                coeff = (2L * phi[h]) % kMod;
            } else {
                coeff = (3L * (phi[h] / 2L)) % kMod;
            }

            int step = h - 1;
            int count = N / h;
            int exp = step;
            for (int i = 0; i < count; ++i) {
                long term = (coeff * pow2[exp]) % kMod;
                ans += term;
                if (ans >= kMod) {
                    ans -= kMod;
                }
                exp += step;
            }
        }

        return Long.toString(ans);
    }

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