def getPrimeFactorsList(num):

  pn = 2 #素数は2から

  pflist = [] #素因数のリスト

  while pn * pn <= num: #√numまで調べる

    while num % pn == 0: #現在の素数で割り切れる範囲でループ

      num = num / pn

      pflist.append(pn)

    pn += 1 #割り切れなくなったら次の素数へ

  if num > 1:

    pflist.append(int(num))

  return pflist



mod = (10 ** 9 + 7)

N = int(eval(input()))

ans = 0





pf_dict = {}

#素因数がキー、割れる回数を値として用意し、最後に約数の個数を求める

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



  pflist = getPrimeFactorsList(i)

  pfset = set(pflist)

  for j in pfset:

    if j in pf_dict:

      pf_dict[j] += pflist.count(j)

    else:

      pf_dict[j] = pflist.count(j)

    #count *= (pflist.count(j) + 1)

  

count = 1

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

  count *= (v + 1)

print((count % mod)) 
N = int(eval(input()))



prime_dict = {}



while N > 1:

  pn = 2

  tmp = N

  while pn * pn <= tmp:

    while tmp % pn == 0:

      tmp = tmp / pn

      prime_dict[pn] = prime_dict.get(pn, 0) + 1

    pn += 1

  if tmp > 1:

    prime_dict[tmp] = prime_dict.get(tmp, 0) + 1

  N -= 1



cnt = 1  

for key in list(prime_dict.keys()):

  cnt *= prime_dict[key]+1

  

print((cnt % (10**9+7)))
def getPrimeFactorsList(num):
    pn = 2  # 素数は2から
    pflist = []  # 素因数のリスト
    while pn * pn <= num:  # √numまで調べる
        while num % pn == 0:  # 現在の素数で割り切れる範囲でループ
            num = num / pn
            pflist.append(pn)
        pn += 1  # 割り切れなくなったら次の素数へ
    if num > 1:
        pflist.append(int(num))
    return pflist


mod = 10**9 + 7
N = int(eval(input()))
ans = 0
pf_dict = {}
# 素因数がキー、割れる回数を値として用意し、最後に約数の個数を求める
for i in range(2, N + 1):
    pflist = getPrimeFactorsList(i)
    pfset = set(pflist)
    for j in pfset:
        if j in pf_dict:
            pf_dict[j] += pflist.count(j)
        else:
            pf_dict[j] = pflist.count(j)
        # count *= (pflist.count(j) + 1)
count = 1
for v in list(pf_dict.values()):
    count *= v + 1
print((count % mod))

N = int(eval(input()))
prime_dict = {}
while N > 1:
    pn = 2
    tmp = N
    while pn * pn <= tmp:
        while tmp % pn == 0:
            tmp = tmp / pn
            prime_dict[pn] = prime_dict.get(pn, 0) + 1
        pn += 1
    if tmp > 1:
        prime_dict[tmp] = prime_dict.get(tmp, 0) + 1
    N -= 1
cnt = 1
for key in list(prime_dict.keys()):
    cnt *= prime_dict[key] + 1
print((cnt % (10**9 + 7)))

-def getPrimeFactorsList(num): -    pn = 2  # 素数は2から -    pflist = []  # 素因数のリスト -    while pn * pn <= num:  # √numまで調べる -        while num % pn == 0:  # 現在の素数で割り切れる範囲でループ -            num = num / pn -            pflist.append(pn) -        pn += 1  # 割り切れなくなったら次の素数へ -    if num > 1: -        pflist.append(int(num)) -    return pflist - - -mod = 10**9 + 7 -ans = 0 -pf_dict = {} -# 素因数がキー、割れる回数を値として用意し、最後に約数の個数を求める -for i in range(2, N + 1): -    pflist = getPrimeFactorsList(i) -    pfset = set(pflist) -    for j in pfset: -        if j in pf_dict: -            pf_dict[j] += pflist.count(j) -        else: -            pf_dict[j] = pflist.count(j) -        # count *= (pflist.count(j) + 1) -count = 1 -for v in list(pf_dict.values()): -    count *= v + 1 -print((count % mod)) +prime_dict = {} +while N > 1: +    pn = 2 +    tmp = N +    while pn * pn <= tmp: +        while tmp % pn == 0: +            tmp = tmp / pn +            prime_dict[pn] = prime_dict.get(pn, 0) + 1 +        pn += 1 +    if tmp > 1: +        prime_dict[tmp] = prime_dict.get(tmp, 0) + 1 +    N -= 1 +cnt = 1 +for key in list(prime_dict.keys()): +    cnt *= prime_dict[key] + 1 +print((cnt % (10**9 + 7)))