public class Euler609 {

    static final long MOD = 1000000007L;

    public static String solve() {
        int n = 100000000;

        byte[] isPrime = new byte[n + 1];
        for (int i = 2; i <= n; i++)
            isPrime[i] = 1;

        for (int p = 2; p * p <= n; p++) {
            if (isPrime[p] == 1) {
                for (int j = p * p; j <= n; j += p) {
                    isPrime[j] = 0;
                }
            }
        }

        int[] primes = new int[n / 10 + 100];
        int M = 0;
        for (int i = 2; i <= n; i++) {
            if (isPrime[i] == 1) {
                primes[M++] = i;
            }
        }

        int[] pi = new int[M + 1];
        for (int i = 1; i <= M; i++) {
            pi[i] = pi[i - 1] + isPrime[i];
        }

        long[] cnt = new long[32];

        for (int m = 1; m <= M; m++) {
            long pm = primes[m - 1];
            long A = (m < M) ? ((long) primes[m] - pm) : (n - pm + 1);
            long composites = (A >= 1) ? (A - 1) : 0;

            int u = m;
            int c = 0;
            while (u >= 1) {
                if (isPrime[u] == 0)
                    c++;
                if (c + 2 > cnt.length) {
                    long[] newCnt = new long[c + 10];
                    System.arraycopy(cnt, 0, newCnt, 0, cnt.length);
                    cnt = newCnt;
                }
                cnt[c]++;
                cnt[c + 1] += composites;
                if (u == 1)
                    break;
                u = pi[u];
            }
        }

        long prod = 1;
        for (long x : cnt) {
            if (x == 0)
                continue;
            prod = (prod * (x % MOD)) % MOD;
        }

        return Long.toString(prod);
    }

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