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 (Clang 3.8.0) (judge verdict: Wrong Answer)

#include<stdio.h>

//Size以下の素数リストをエラストテネスのふるいで作る
void Sieve(int Size, int *output_size, int out[]){
  *output_size = 0;
  int List[1001]={};
  int i, j;
  for(i=2; i<=Size; i++)
    List[i] = i;
  i=2;
  while(i*i <= Size){
    //List[i]が残っていれば素数
    if(List[i]){
      for(j=i+1; j<=Size; j++){
        //List[i]より大きい数のうちList[i]で割り切れるなら0にする
        if(!(List[j]%List[i]))
          List[j] = 0;
      }
    }
    i++;
  }
  //この時点で穴の空いた素数リストが完成する
  for(i=2; i<=Size; i++){
    if(List[i]){
	  out[*output_size] = List[i];
      (*output_size)++;
    }
  }
}

int main(){
  int N;
  int P[1001];//素数リスト
  int Length_Prime;//素数リストの長さ
  int N_Prime[1001];//それぞれの素数の個数(ただし配列の番号に対応した素数はPと一緒)
  int N_Divisor;//(正の)約数の個数
  scanf("%d", &N);
  Sieve(N, &Length_Prime, P);
  int i, j;
  for(i=2; i<=N; i++){
    int i_temp;
    for(j=0; j<Length_Prime; j++){
      i_temp = i;
      while(!(i_temp%P[j])){
        i_temp /= P[j];
        N_Prime[j]++;
      }
    }
  }
  N_Divisor = 1;
  for(i=0; i<Length_Prime; i++)
    N_Divisor *= (1+N_Prime[i]);
  int DIV, ANS;
  DIV = 1e9 + 7;
  ANS = N_Divisor%DIV;
  printf("%d\n", ANS);
  return 0;
}