#include <bits/stdc++.h>
#include <chrono>
#include <random>
#include <sstream>
#include <string>
#define ll long long int
#define ull unsigned long long int
#define pb push_back
#define mp make_pair
#define mod 1000000007
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
#define vi vector <int>
#define vs vector <string>
#define vc vector <char>
#define vl vector <ll>
#define pll pair<ll,ll>
#define vpll vector <pll>
#define all(c) (c).begin(),(c).end()
#define max3(a,b,c) max(max(a,b),c)
#define min3(a,b,c) min(min(a,b),c)
using namespace std;
ll power(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll modInverse(ll a){return power(a,mod-2);}
const int N=100001;
bool vis[N];
vector <int> adj[N];
ll gcd(ll a, ll b) { if (a == 0) return b; return gcd(b % a, a); } 
ll lcm(ll a, ll b){return a*b/gcd(a, b);}
// ll binaryNum[8];
// void decToBinary(ll n) 
// { 
//     // binaryNum[8];
//     rep(i,8){
//         binaryNum[i]=0;
//     }
//     int i = 0; 
//     while (n > 0) { 
//         binaryNum[i] = n % 2; 
//         n = n / 2; 
//         i++; 
//     } 
// } 
vl cnt;
vi prnt;
void dfs(ll u, ll parent){
    // vis[u]=true;
    ll a=0;
    if(adj[u].size()==1){
        // cout<<u<<' ';
        cnt[u]=1;
    }
    // cout<<u<<' ';
    for(int v:adj[u]){
        if(v!=parent){
            a++;
            prnt[v]=u;
            dfs(v, u);
            // cnt[u]+=cnt[v];
        }
    }
    if(u!=1){
        cnt[parent]+=cnt[u];
    }

}

// C++ program to find prime factorization of a 
// number n in O(Log n) time with precomputation 
// allowed. 
#include "bits/stdc++.h" 
using namespace std; 

#define MAXN 1000001 

// stores smallest prime factor for every number 
int spf[MAXN]; 

// Calculating SPF (Smallest Prime Factor) for every 
// number till MAXN. 
// Time Complexity : O(nloglogn) 
void sieve() 
{ 
    spf[1] = 1; 
    for (int i=2; i<MAXN; i++) 

        // marking smallest prime factor for every 
        // number to be itself. 
        spf[i] = i; 

    // separately marking spf for every even 
    // number as 2 
    for (int i=4; i<MAXN; i+=2) 
        spf[i] = 2; 

    for (int i=3; i*i<MAXN; i++) 
    { 
        // checking if i is prime 
        if (spf[i] == i) 
        { 
            // marking SPF for all numbers divisible by i 
            for (int j=i*i; j<MAXN; j+=i) 

                // marking spf[j] if it is not 
                // previously marked 
                if (spf[j]==j) 
                    spf[j] = i; 
        } 
    } 
} 

// A O(log n) function returning primefactorization 
// by dividing by smallest prime factor at every step 
vector<int> getFactorization(int x) 
{ 
    vector<int> ret; 
    while (x != 1) 
    { 
        ret.push_back(spf[x]); 
        x = x / spf[x]; 
    } 
    return ret; 
} 

// driver program for above function 
// int main(int argc, char const *argv[]) 
// { 
//     // precalculating Smallest Prime Factor 
    
// } 

void solve(){
    sieve(); 
    // int x = 12246; 
    // cout << "prime factorization for " << x << " : "; 
    ll n;
    cin>>n;
    vl a(n);
    rep(i,n){
        a[i]=1;
    }
    a[0]=0;
    // calling getFactorization function 
    for(int i=1;i<=n-1;i++){
    vector <int> p = getFactorization(i); 
    sort(all(p));
    ll count=0;

    rep(j,p.size()){
        if(j!=0){
            if(p[j]==p[j-1]){
                count++;
            }
            else{
                // if(count>0){
                //     count++;
                //     a[i]*=(count+1);
                // }
                count++;
                a[i]*=(count+1);
                count=0;
            }
        }
        if(j==p.size()-1){
            // if(count>0){
            //     count++;
            //     a[i]*=(count+1);
            // }
            count++;
            a[i]*=(count+1);
        }
    }
    }
    ll ans=0;
    rep(i,n){
        ans+=a[i]%mod;
    }
    cout<<ans;
    // for (int i=0; i<p.size(); i++) 
    //     cout << p[i] << " "; 
    // cout << endl; 
    // return 0; 

}


int main()
{
    // cout<<1<<endl;
    #ifndef ONLINE_JUDGE
        // for getting input from input.txt
        freopen("input.txt", "r", stdin);
        // for writing output to output.txt
        freopen("output.txt", "w", stdout);
    #endif
    
    
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int T=1;
    // cin>>T;
    int t=0;
    while(t++<T)
    {
        // cout<<"Case #"<<t<<":"<<' ';
        solve();
        //cout<<'\n';
    }
    cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC << "ms\n";
}

Measured memory_bytes: 17096