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 Kotlin (1.0.0) (judge verdict: Wrong Answer)

fun main(args: Array<String>) {
    val n = readLine()!!.toInt()

    // n の階乗の約数の個数を mod 1e9+7 で出力
    // n を構成する素数と，その数を求める

    val counter = IntArray(1001)

    // そもそも 1000 の階乗は計算結果を保持しておけないので注意
    // どうする？？
    // 愚直に全探索でも間に合う

    // 実装が汚い，きれいな方針は？
    for (i in 1 until counter.size) {
        // 素数の場合だけカウント
        if(isPrime(i)) {
            // n の階乗で出てくる値一つ一つで当該の素数が何回出てくるか確認
            for (j in 1..n) {
                var k = j
                while (k % i == 0 && k != 0) {
                    counter[i] += 1
                    k /= i
                }
            }
        }
    }

//    val ans = counter.filter { it != 0 }.map { it + 1 }.fold(1) { acc, i -> acc * i % (1e9+7).toInt()}

    var tmp = 1L
    for (v in counter) {
        if ( v != 0 ){
            tmp = tmp * (v+1) % (1e9+7).toLong()
//            println(tmp)
        }
    }
    // WA: 値が大きくなるとWA なぜ？
    println(tmp)
}

// 素数判定
fun isPrime(x: Int): Boolean {
    if (x == 2) {
        return true
    }

    if (x < 2 || x % 2 == 0) {
        return false
    }

    var i = 3

    while (i < Math.sqrt(x.toDouble()).toInt()) {
        if (x % i == 0) {
            return false
        }
        i += 2
    }
    return true
}