import java.util.*;

public class Euler937 {

    static final long kMod = 1000000007L;

    static List<Integer> primesUntil(int n) {
        boolean[] isPrime = new boolean[n + 1];
        Arrays.fill(isPrime, true);
        isPrime[0] = false;
        isPrime[1] = false;

        for (int p = 2; (long) p * p <= n; ++p) {
            if (isPrime[p]) {
                for (int q = p * p; q <= n; q += p) {
                    isPrime[q] = false;
                }
            }
        }

        List<Integer> primes = new ArrayList<>();
        for (int i = 2; i <= n; ++i) {
            if (isPrime[i]) {
                primes.add(i);
            }
        }
        return primes;
    }

    public static String solve(int n) {
        List<Integer> primes = primesUntil(n);
        byte[] diff = new byte[n + 1];

        for (int p : primes) {
            int r = p & 7;
            if (r == 1 || r == 3) {
                continue;
            }

            int e = 0;
            int pe = Integer.bitCount(e) & 1;
            for (int q = p; q <= n; q += p) {
                int x = q / p;
                int cnt = 1;
                while (x % p == 0) {
                    cnt++;
                    x /= p;
                }
                e += cnt;
                int ce = Integer.bitCount(e) & 1;
                diff[q] ^= (byte) (pe ^ ce);
                pe = ce;
            }
        }

        byte parity = 0;
        long ans = 0;
        long fact = 1;

        for (int k = 1; k <= n; ++k) {
            parity ^= diff[k];
            fact = (fact * k) % kMod;
            if (parity == 0) {
                ans += fact;
                if (ans >= kMod) {
                    ans -= kMod;
                }
            }
        }

        return Long.toString(ans);
    }

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