// Original C++ solution (slower):
#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>

#include <ext/pb_ds/tree_policy.hpp>



using namespace std;

using namespace __gnu_pbds;



#define fi first

#define se second

#define mp make_pair

#define pb push_back

#define fbo find_by_order

#define ook order_of_key



typedef long long ll;

typedef pair<ll,ll> ii;

typedef vector<int> vi;

typedef long double ld; 

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;

typedef set<int>::iterator sit;

typedef map<int,int>::iterator mit;

typedef vector<int>::iterator vit;



struct NumberTheory

{

	vector<ll> primes;

	vector<bool> prime;

	vector<ll> totient;

	vector<ll> sumdiv;

	vector<ll> bigdiv;

	void Sieve(ll n)

	{

		prime.assign(n+1, 1);

		prime[1] = false;

		for(ll i = 2; i <= n; i++)

		{

			if(prime[i])

			{

				primes.pb(i);

				for(ll j = i*2; j <= n; j += i)

				{

					prime[j] = false;

				}

			}

		}

	}

	

	ll phi(ll x)

	{

		map<ll,ll> pf;

		ll num = 1; ll num2 = x;

		for(ll i = 0; primes[i]*primes[i] <= x; i++)

		{

			if(x%primes[i]==0)

			{

				num2/=primes[i];

				num*=(primes[i]-1);

			}

			while(x%primes[i]==0)

			{

				x/=primes[i];

				pf[primes[i]]++;

			}

		}

		if(x>1)

		{

			pf[x]++; num2/=x; num*=(x-1);

		}

		x = 1;

		num*=num2;

		return num;

	}

	

	bool isprime(ll x)

	{

		if(x==1) return false;

		for(ll i = 0; primes[i]*primes[i] <= x; i++)

		{

			if(x%primes[i]==0) return false;

		}

		return true;

	}



	void SievePhi(ll n)

	{

		totient.resize(n+1);

		for (int i = 1; i <= n; ++i) totient[i] = i;

		for (int i = 2; i <= n; ++i)

		{

			if (totient[i] == i)

			{

				for (int j = i; j <= n; j += i)

				{

					totient[j] -= totient[j] / i;

				}

			}

		}

	}

	

	void SieveSumDiv(ll n)

	{

		sumdiv.resize(n+1);

		for(int i = 1; i <= n; ++i)

		{

			for(int j = i; j <= n; j += i)

			{

				sumdiv[j] += i;

			}

		}

	}

	

	ll getPhi(ll n)

	{

		return totient[n];

	}

	

	ll getSumDiv(ll n)

	{

		return sumdiv[n];

	}

	

	ll modpow(ll a, ll b, ll mod)

	{

		ll r = 1;

		if(b < 0) b += mod*100000LL;

		while(b)

		{

			if(b&1) r = (r*a)%mod;

			a = (a*a)%mod;

			b>>=1;

		}

		return r;

	}

	

	ll inv(ll a, ll mod)

	{

		return modpow(a, mod - 2, mod);

	}

	

	ll invgeneral(ll a, ll mod)

	{

		ll ph = phi(mod);

		ph--;

		return modpow(a, ph, mod);

	}

	

	void getpf(vector<ii>& pf, ll n)

	{

		for(ll i = 0; primes[i]*primes[i] <= n; i++)

		{

			int cnt = 0;

			while(n%primes[i]==0)

			{

				n/=primes[i]; cnt++;

			}

			pf.pb(ii(primes[i], cnt));

		}

		if(n>1)

		{

			pf.pb(ii(n, 1));

		}

	}



	//ll op;

	void getDiv(vector<ll>& div, vector<ii>& pf, ll n, int i)

	{

		//op++;

		ll x, k;

		if(i >= pf.size()) return ;

		x = n;

		for(k = 0; k <= pf[i].se; k++)

		{

			if(i==int(pf.size())-1) div.pb(x);

			getDiv(div, pf, x, i + 1);

			x *= pf[i].fi;

		}

	}

};



NumberTheory nt;

map<int,int> ma;

const int MOD = 1e9 + 7;

int main()

{

	ios_base::sync_with_stdio(0); cin.tie(0);

	int n; cin>>n;

	if(n==1)

	{

		cout<<1<<'\n';

		return 0;

	}

	nt.Sieve(1001);

	for(int i = 2; i <= n; i++)

	{

		vector<ii> pf;

		nt.getpf(pf,i);

		for(int j = 0; j < pf.size(); j++)

		{

			ma[pf[j].fi]+=pf[j].se;

		}

	}

	ll ans = 1;

	for(mit it = ma.begin(); it != ma.end(); it++)

	{

		ans*=ll(it->se+1);

		ans%=MOD;

	}

	if(ans<0) ans+=MOD;

	cout<<ans<<'\n';

}


// Optimized solution to the same problem (faster):
#include<cstdio>

#include<algorithm>

using namespace std;



bool arr[1005];

int hash_[1005];

const int MOD = 1e9+7;

void init(){

arr[1] = 1;

arr[2] = 1;

arr[3] = 1;

arr[5] = 1;

arr[7] = 1;

arr[11] = 1;

arr[13] = 1;

arr[17] = 1;

arr[19] = 1;

arr[23] = 1;

arr[29] = 1;

arr[31] = 1;

arr[37] = 1;

arr[41] = 1;

arr[43] = 1;

arr[47] = 1;

arr[53] = 1;

arr[59] = 1;

arr[61] = 1;

arr[67] = 1;

arr[71] = 1;

arr[73] = 1;

arr[79] = 1;

arr[83] = 1;

arr[89] = 1;

arr[97] = 1;

arr[101] = 1;

arr[103] = 1;

arr[107] = 1;

arr[109] = 1;

arr[113] = 1;

arr[127] = 1;

arr[131] = 1;

arr[137] = 1;

arr[139] = 1;

arr[149] = 1;

arr[151] = 1;

arr[157] = 1;

arr[163] = 1;

arr[167] = 1;

arr[173] = 1;

arr[179] = 1;

arr[181] = 1;

arr[191] = 1;

arr[193] = 1;

arr[197] = 1;

arr[199] = 1;

arr[211] = 1;

arr[223] = 1;

arr[227] = 1;

arr[229] = 1;

arr[233] = 1;

arr[239] = 1;

arr[241] = 1;

arr[251] = 1;

arr[257] = 1;

arr[263] = 1;

arr[269] = 1;

arr[271] = 1;

arr[277] = 1;

arr[281] = 1;

arr[283] = 1;

arr[293] = 1;

arr[307] = 1;

arr[311] = 1;

arr[313] = 1;

arr[317] = 1;

arr[331] = 1;

arr[337] = 1;

arr[347] = 1;

arr[349] = 1;

arr[353] = 1;

arr[359] = 1;

arr[367] = 1;

arr[373] = 1;

arr[379] = 1;

arr[383] = 1;

arr[389] = 1;

arr[397] = 1;

arr[401] = 1;

arr[409] = 1;

arr[419] = 1;

arr[421] = 1;

arr[431] = 1;

arr[433] = 1;

arr[439] = 1;

arr[443] = 1;

arr[449] = 1;

arr[457] = 1;

arr[461] = 1;

arr[463] = 1;

arr[467] = 1;

arr[479] = 1;

arr[487] = 1;

arr[491] = 1;

arr[499] = 1;

arr[503] = 1;

arr[509] = 1;

arr[521] = 1;

arr[523] = 1;

arr[541] = 1;

arr[547] = 1;

arr[557] = 1;

arr[563] = 1;

arr[569] = 1;

arr[571] = 1;

arr[577] = 1;

arr[587] = 1;

arr[593] = 1;

arr[599] = 1;

arr[601] = 1;

arr[607] = 1;

arr[613] = 1;

arr[617] = 1;

arr[619] = 1;

arr[631] = 1;

arr[641] = 1;

arr[643] = 1;

arr[647] = 1;

arr[653] = 1;

arr[659] = 1;

arr[661] = 1;

arr[673] = 1;

arr[677] = 1;

arr[683] = 1;

arr[691] = 1;

arr[701] = 1;

arr[709] = 1;

arr[719] = 1;

arr[727] = 1;

arr[733] = 1;

arr[739] = 1;

arr[743] = 1;

arr[751] = 1;

arr[757] = 1;

arr[761] = 1;

arr[769] = 1;

arr[773] = 1;

arr[787] = 1;

arr[797] = 1;

arr[809] = 1;

arr[811] = 1;

arr[821] = 1;

arr[823] = 1;

arr[827] = 1;

arr[829] = 1;

arr[839] = 1;

arr[853] = 1;

arr[857] = 1;

arr[859] = 1;

arr[863] = 1;

arr[877] = 1;

arr[881] = 1;

arr[883] = 1;

arr[887] = 1;

arr[907] = 1;

arr[911] = 1;

arr[919] = 1;

arr[929] = 1;

arr[937] = 1;

arr[941] = 1;

arr[947] = 1;

arr[953] = 1;

arr[967] = 1;

arr[971] = 1;

arr[977] = 1;

arr[983] = 1;

arr[991] = 1;

arr[997] = 1;

}



int main(){

    int n;

    scanf("%d",&n);

    init();

    long long ans = 1;// n = 1

    for(int i=2;i<=n;i++){

        if(arr[i])hash_[i]++;// 素数

        else for(int j=2,t=i;j<=t;j++){

            while(t%j==0){

                hash_[j]++;

                t/=j;

            }

        }

    }

    for(int i=1;i<=n;i++){

        if(hash_[i])

            ans = ans*(hash_[i]+1)%MOD;

    }



    printf("%d",ans);

    return 0;

}


// Fastest known solution for this problem: