Problem:
Score : 300 points

Problem Statement

You are given an integer N.
Find the number of the positive divisors of N!, modulo 10^9+7.

Constraints

1≤N≤10^3

Input

The input is given from Standard Input in the following format:

N

Output

Print the number of the positive divisors of N!, modulo 10^9+7.

Sample Input 1

3

Sample Output 1

4

There are four divisors of 3! =6: 1, 2, 3 and 6. Thus, the output should be 4.

Sample Input 2

6

Sample Output 2

30

Sample Input 3

1000

Sample Output 3

972926972

Solution in C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
class Scanner
{
    string[] s;
    int i;

    char[] cs = new char[] { ' ' };

    public Scanner() {
        s = new string[0];
        i = 0;
    }

    public string next() {
        if (i < s.Length) return s[i++];
        string st = Console.ReadLine();
        while (st == "") st = Console.ReadLine();
        s = st.Split(cs, StringSplitOptions.RemoveEmptyEntries);
        if (s.Length == 0) return next();
        i = 0;
        return s[i++];
    }

    public int Int() {
        return int.Parse(next());
    }
    public int[] ArrayInt(int N, int add = 0) {
        int[] Array = new int[N];
        for (int i = 0; i < N; i++) {
            Array[i] = Int() + add;
        }
        return Array;
    }

    public long Long() {
        return long.Parse(next());
    }

    public long[] ArrayLong(int N, long add = 0) {
        long[] Array = new long[N];
        for (int i = 0; i < N; i++) {
            Array[i] = Long() + add;
        }
        return Array;
    }
}
class Program {
    static Scanner cin = new Scanner();
    static Dictionary<int, long> dic = new Dictionary<int, long>();
    static void Main() {
        int N = cin.Int();
        for (int i = N; i >= 2; i--) {
            prime_factorization(i);
        }
        long ans = 1;
        foreach (var v in dic.Values) {
            ans = (ans % 1000000007 * (v + 1)) % 1000000007;
        }
        Console.WriteLine(ans);
        Console.ReadLine();
    }

    static void prime_factorization(int n) //Key:素数, Value:指数
{
        int i = 2, tmp = n;
        while (i * i <= n) {
            if (tmp % i == 0) {
                if (dic.ContainsKey(i)) dic[i]++;
                else dic[i] = 1;
                tmp /= i;
            }
            else i++;
        }
        if (tmp > 1) {
            if (dic.ContainsKey(tmp)) dic[tmp]++;
            else dic[tmp] = 1;
        }
    }

}