import java.util.*; public class Main {  //MAX就是根据输入的n所创建的数组大小  final static int MAX = (int) (1e6+5);  final static int MOD = (int) (1E9+7);  static boolean[] visited = new boolean[MAX];   public static void main(String[] args) {  Scanner in = new Scanner(System.in);  int n = in.nextInt();  in.close();  System.out.println(helper(n));  }   private static long helper(int n) {  //最终的输出值  long ans = 1;  //1的位置肯定是Y,固定的。所以从2开始计算  for(int i=2;i<=n;i++) {  //保存i的幂的次数  int count = 0;  //当visited[i]是true的时候,说明它是前面某个数的倍数,那他的值也就不由他决定了,没有必要继续往下走了,  if(visited[i])  continue;  //将i的倍数的位置全部设定为true,以后经过这个位置就跳过继续循环  for(int j=i+i;j<=n;j+=i) {  visited[j] = true;  }  long mi = i;  //计算i的幂的次数,值要小于等于n  while(mi <= n) {  count++;  mi = mi*i;  }  //计算有多少和合法的组合  ans = ans * (count+1) % MOD;  }  return ans;  } }