from collections import defaultdict



N = int(eval(input()))

MOD = 10**9+7

mp = defaultdict(int)

# N! -> N-1, N-2,...で対応 (1は影響ないから2からスタート)

for i in range(2, N+1) :

  x = i

  for j in range(2, x+1): # 素数jの個数を求める

    while x%j == 0:

      x /= j

      mp[j] += 1

      

ans = 1

for v in list(mp.values()):

  ans = ((ans%MOD) * (v+1)%MOD) % MOD

print(ans)  

  
"""

ある整数 x が、素因数分解によって x = p^n × q^m × ... (p, q, ...は素数) と表せる時、

x の約数の個数は(n + 1) × (m + 1) × ... となります。

"""



"""nを素因数分解"""

"""2以上の整数n => return [[素因数, 指数], ...]の2次元リスト"""

def factorization(n):  

    arr = []

    temp = n

    for i in range(2, int(-(-n**0.5//1))+1):

        if temp%i==0:

            cnt=0

            while temp%i==0:

                cnt+=1

                temp //= i

            arr.append([i, cnt])



    if temp!=1:

        arr.append([temp, 1])



    if arr==[]:

        arr.append([n, 1])

    return arr

  

from collections import defaultdict

N = int(eval(input()))

MOD = 10**9+7

primes = defaultdict(int)

# N!をループしそれぞれの素因数を取得

for i in range(2, N+1):

  for k, v in factorization(i):

    primes[k] += v



ans = 1  

for k, v in list(primes.items()):

  ans = ans * (v+1)%MOD

print(ans)
from collections import defaultdict

N = int(eval(input()))
MOD = 10**9 + 7
mp = defaultdict(int)
# N! -> N-1, N-2,...で対応 (1は影響ないから2からスタート)
for i in range(2, N + 1):
    x = i
    for j in range(2, x + 1):  # 素数jの個数を求める
        while x % j == 0:
            x /= j
            mp[j] += 1
ans = 1
for v in list(mp.values()):
    ans = ((ans % MOD) * (v + 1) % MOD) % MOD
print(ans)

"""
ある整数 x が、素因数分解によって x = p^n × q^m × ... (p, q, ...は素数) と表せる時、
x の約数の個数は(n + 1) × (m + 1) × ... となります。
"""
"""nを素因数分解"""
"""2以上の整数n => return [[素因数, 指数], ...]の2次元リスト"""


def factorization(n):
    arr = []
    temp = n
    for i in range(2, int(-(-(n**0.5) // 1)) + 1):
        if temp % i == 0:
            cnt = 0
            while temp % i == 0:
                cnt += 1
                temp //= i
            arr.append([i, cnt])
    if temp != 1:
        arr.append([temp, 1])
    if arr == []:
        arr.append([n, 1])
    return arr


from collections import defaultdict

N = int(eval(input()))
MOD = 10**9 + 7
primes = defaultdict(int)
# N!をループしそれぞれの素因数を取得
for i in range(2, N + 1):
    for k, v in factorization(i):
        primes[k] += v
ans = 1
for k, v in list(primes.items()):
    ans = ans * (v + 1) % MOD
print(ans)

+""" +ある整数 x が、素因数分解によって x = p^n × q^m × ... (p, q, ...は素数) と表せる時、 +x の約数の個数は(n + 1) × (m + 1) × ... となります。 +""" +"""nを素因数分解""" +"""2以上の整数n => return [[素因数, 指数], ...]の2次元リスト""" + + +def factorization(n): +    arr = [] +    temp = n +    for i in range(2, int(-(-(n**0.5) // 1)) + 1): +        if temp % i == 0: +            cnt = 0 +            while temp % i == 0: +                cnt += 1 +                temp //= i +            arr.append([i, cnt]) +    if temp != 1: +        arr.append([temp, 1]) +    if arr == []: +        arr.append([n, 1]) +    return arr + + -mp = defaultdict(int) -# N! -> N-1, N-2,...で対応 (1は影響ないから2からスタート) +primes = defaultdict(int) +# N!をループしそれぞれの素因数を取得 -    x = i -    for j in range(2, x + 1):  # 素数jの個数を求める -        while x % j == 0: -            x /= j -            mp[j] += 1 +    for k, v in factorization(i): +        primes[k] += v -for v in list(mp.values()): -    ans = ((ans % MOD) * (v + 1) % MOD) % MOD +for k, v in list(primes.items()): +    ans = ans * (v + 1) % MOD