//
//  main.cpp
//  A
//
//  Created by E SAMEER KUMAR on 09/04/20.
//  Copyright © 2020 E SAMEER KUMAR. All rights reserved.

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
//map<int,vector<int>> tree;
//map<int,vector<int>> rooted;
//map<int,int> primes;
void debugi(vector<int> & vec){
    int n=(int)vec.size();
    for(int i=0;i<n;i++){
        cout<<vec[i]<<" ";
    }
    cout<<endl;
}
void debugl(vector<ll> & vec){
    int n=(int)vec.size();
    for(int i=0;i<n;i++){
        cout<<vec[i]<<" ";
    }
    cout<<endl;
}
void debugmap(map<int,int> & mp){
    for(auto x:mp){
        cout<<x.first<<" "<<x.second<<" , ";
    }
    cout<<endl;
}
void debugset(set<int> & st){
    for(auto x: st){
        cout<<x<<" ";
    }
    cout<<endl;
}
void debugparri(vector<pair<int, int>>& arr){
    for(int i=0;i<(int)arr.size();i++){
        cout<<"["<<arr[i].first<<" : "<<arr[i].second<<"]"<<" ";
    }
    cout<<endl;
}
void debugpi(pair<int, int> &pi){
    cout<<pi.first<<" "<<pi.second<<endl;
}
void debugq(queue<int> q){
    while(!q.empty()){
        cout<<q.front()<<" ";
        q.pop();
    }
    cout<<endl;
}

bool check(int n,int i,int j){
    if((0<=i & i<n) && (0<=j & j<n)){
        return true;
    }
    return false;
}
// ll MOD = 1e9+7;
ll mod = 998244353;
ll powab(ll a,ll b,ll mod){
    if(b==0){
        return 1;
    }
    ll z=powab(a, b/2, mod);
    ll res=(z*z*1LL)%mod;
    if(b&1){
        res=(res*1LL*a)%mod;
    }
    return res;
}
// char s[100006];
// int m=200005;
// int p;
//int mod(int x,int mod){
//    if(x<0){
//        return mod-(x%mod);
//    }
//    else{
//        return x%mod;
//    }
//}
//ll modinv(ll a){
//    ll ans=powab(a, mod-2, mod);
//    return ans;
//}

int lim=10;
int n;
vector<vector<pair<int,ll>>>g(lim);
vector<int> vis(lim);
vector<ll> dp(lim),a(lim);
int dia=0,node=0;
int ind = 0;
ll gcd(ll a, ll b){
    if(b==0){
        return a;
    }
    return gcd(b,a%b);
}
void upd(int k, int x,vector<int>& tree,int n){
//    cout<<k<<" k "<<endl;
    if(k==0){
        return;
    }
//    cout<<k<<" k "<<endl;
    while(k<=n){
//        cout<<k<<" kk "<<endl;
        tree[k]+=x;
        k+=(k&-k);
    }
}
int sum(int k,vector<int>& tree,int n){
    int s=0;
    while(k>=1){
        s+=tree[k];
        k-=(k&-k);
    }
    return s;
}
int x,k;
vector<int> sieve(1000010,0);
void fill(){
    // cout<<"sra"<<endl;
    for(int i=2;i<=1000004;i++){
        // cout<<i<<endl;
        if(sieve[i]==0){
            sieve[i]=i;
            for(int j=i;j<=1000004;j+=i){
                sieve[j]=i;
            }
        }
    }
    // cout<<"filled"<<endl;
}
void solve(){
    int n;
    cin>>n;
    fill();
    int ans=0;
    // cout<<sieve[1321]<<endl;
    for(int i=1;i<n;i++){
        int m=n-i;
        // int lim=(int)sqrt(m)+2;
        map<int,int> mp;
        // cout<<m<<" m "<<endl;
        while(m!=1){
            int f=sieve[m];
            // cout<<f<<" "<<m<<endl;
            mp[f]+=1;
            m/=f;
        }
        int p=1;
        for(auto x:mp){
            p*=(x.second+1);
        }
        ans+=p;
    }
    cout<<ans<<endl;
    return;
}
int main(int argc, const char * argv[]) {
    // insert code here...
    // ofstream file;
    ios_base::sync_with_stdio(false); 
    cin.tie(NULL);
    int t;
    // cin >> t;
    t = 1;
    for(int tt=0;tt<t;tt++){
        solve();
    }
    return 0;
}

Measured memory_bytes: 7028