#include <bits/stdc++.h>
using namespace std;

int main() {
  long long N;
  cin >> N;

  long long ans = 0;
  for (long long C = 1; C < N; C++) {
    long long AB = N - C;
    for (long long A = 1; A * A <= AB; A++) {
      if (AB % A == 0) {
        ans++;
        if (AB / A != A)
          ans++;
      }
    }
  }

  cout << ans << endl;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
  long long N;
  cin >> N;

  long long ans = 0;
  for (long long A = 1; A < N; A++) {
    long long B = N / A;
    long long C = N % A;
    if (C > 0) {
      ans += B;
    } else
      ans += B - 1;
  }

  cout << ans << endl;
}


#include <bits/stdc++.h>
using namespace std;

int main() {
  long long N;
  cin >> N;
  int count = 0;
  for (long long i = 1; i < N; i++) {
    int a = sqrt(N - i);
    for (int j = 1; j <= a; j++) {
      if ((N - i) % j == 0) {
        long long b = (N - i) / j;
        if (b == j) {
          count++;
        } else {
          count++;
          count++;
        }
      }
    }
  }
  cout << count << endl;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
  long long N;
  cin >> N;
  int count = 0;
  for (int i = 1; i <= N - 1; i++) {
    count += (N - 1) / i;
  }
  cout << count << endl;
}


#include <bits/stdc++.h>
// #include<iostream>
// #include<vector>
// #include<map>
// #include<math.h>
// #include<algorithm>

#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep2(i, a, n) for (int i = (int)(a); i <= (int)(n); i++)
#define rrep(i, n) for (int i = (int)(n - 1); i > -1; i--)
#define rrep2(i, n, a) for (int i = (int)(n); i >= (int)(a); i--)

#define fi first
#define se second

using namespace std;

using ll = long long;
using v_int = vector<int>;
using v2_int = vector<v_int>;
using v_ll = vector<ll>;
using v2_ll = vector<v_ll>;
using v_string = vector<string>;
using v_bool = vector<bool>;
using v2_bool = vector<v_bool>;
using pii = pair<int, int>;
using mii = map<int, int>;

const double PI = 3.1415926535897932;
const int INF = (int)2e9;
const ll LINF = (ll)2e18;
const ll MOD = 1000000007;
const int dc[8] = {1, -1, 0, 0, 1, -1, 1, -1};
const int dr[8] = {0, 0, 1, -1, 1, 1, -1, -1};

template <typename T, typename U>
inline ostream &operator<<(ostream &o, pair<T, U> &p) {
  return o << "{" << p.first << "," << p.second << "}";
}
template <typename T> inline istream &operator>>(istream &is, vector<T> &vec) {
  for (auto &v : vec) {
    is >> v;
  }
  return is;
}
template <typename T> inline ostream &operator<<(ostream &os, vector<T> &vec) {
  for (auto &v : vec) {
    os << v << ",";
  }
  return os;
}
template <typename T>
inline ostream &operator<<(ostream &os, vector<vector<T>> &mat) {
  for (auto &row : mat) {
    os << row << endl;
  }
  return os;
}

template <typename T> inline void chmin(T &a, T b) { a = min(a, b); }
template <typename T> inline void chmax(T &a, T b) { a = max(a, b); }

int main(void) {
  int n;
  cin >> n;

  ll cnt = 0;
  for (int c = 1; c <= n; c++) {
    ll ab = n - c;
    for (ll a = 1; a * a <= ab; a++) {
      if (ab % a == 0) {
        ll b = ab / a;
        if (a * b + c == n) {
          cnt++;
        }
        if (a != b) {
          cnt++;
        }
      }
    }
  }
  cout << cnt << endl;

  return 0;
} /*atcoder*/

#include <bits/stdc++.h>
// #include<iostream>
// #include<vector>
// #include<map>
// #include<math.h>
// #include<algorithm>

#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep2(i, a, n) for (int i = (int)(a); i <= (int)(n); i++)
#define rrep(i, n) for (int i = (int)(n - 1); i > -1; i--)
#define rrep2(i, n, a) for (int i = (int)(n); i >= (int)(a); i--)

#define fi first
#define se second

using namespace std;

using ll = long long;
using v_int = vector<int>;
using v2_int = vector<v_int>;
using v_ll = vector<ll>;
using v2_ll = vector<v_ll>;
using v_string = vector<string>;
using v_bool = vector<bool>;
using v2_bool = vector<v_bool>;
using pii = pair<int, int>;
using mii = map<int, int>;

const double PI = 3.1415926535897932;
const int INF = (int)2e9;
const ll LINF = (ll)2e18;
const ll MOD = 1000000007;
const int dc[8] = {1, -1, 0, 0, 1, -1, 1, -1};
const int dr[8] = {0, 0, 1, -1, 1, 1, -1, -1};

template <typename T, typename U>
inline ostream &operator<<(ostream &o, pair<T, U> &p) {
  return o << "{" << p.first << "," << p.second << "}";
}
template <typename T> inline istream &operator>>(istream &is, vector<T> &vec) {
  for (auto &v : vec) {
    is >> v;
  }
  return is;
}
template <typename T> inline ostream &operator<<(ostream &os, vector<T> &vec) {
  for (auto &v : vec) {
    os << v << ",";
  }
  return os;
}
template <typename T>
inline ostream &operator<<(ostream &os, vector<vector<T>> &mat) {
  for (auto &row : mat) {
    os << row << endl;
  }
  return os;
}

template <typename T> inline void chmin(T &a, T b) { a = min(a, b); }
template <typename T> inline void chmax(T &a, T b) { a = max(a, b); }

map<ll, ll> PrimeFactorial(ll n) {
  map<ll, ll> ret;

  for (ll i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      while (n % i == 0) {
        ret[i]++;
        n /= i;
      }
    }
  }

  if (n > 1) {
    ret[n]++;
  }

  return ret;
}

int main(void) {
  int n;
  cin >> n;

  ll cnt = 0;

  for (ll ab = 1; ab <= n - 1; ab++) {
    auto mp = PrimeFactorial(ab);
    ll sum = 1;
    for (auto f : mp) {
      sum *= (f.se + 1);
    }
    cnt += sum;
  }
  cout << cnt << endl;
  return 0;
} /*atcoder*/


#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
using namespace std;
using ll = long long;

template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}

template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
struct Unionfind {
  vector<int> par;
  vector<int> sizes;

  Unionfind(int n) : par(n), sizes(n, 1) {
    for (int i = 0; i < n; ++i)
      par[i] = i;
  }

  int root(int x) {
    if (par[x] == x)
      return x;
    return par[x] = root(par[x]);
  }

  void unite(int x, int y) {
    int rx = root(x);
    int ry = root(y);
    if (rx == ry)
      return;
    if (sizes[x] < sizes[y])
      swap(x, y);
    par[ry] = rx;
    sizes[rx] += sizes[ry];
  }

  bool same(int x, int y) {
    int rx = root(x);
    int ry = root(y);
    return rx == ry;
  }

  int size(int x) { return sizes[root(x)]; }
};

int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);

  ll n;
  cin >> n;

  ll cnt = 0;
  for (ll c = 1; c < n; ++c) {
    ll num = n - c;

    for (ll i = 1; i * i <= num; ++i) {
      if (num % i == 0) {
        ++cnt;
        if (i * i != num)
          ++cnt;
      }
    }
  }
  cout << cnt << endl;
  return 0;
}

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
using namespace std;
using ll = long long;

template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}

template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
struct Unionfind {
  vector<int> par;
  vector<int> sizes;

  Unionfind(int n) : par(n), sizes(n, 1) {
    for (int i = 0; i < n; ++i)
      par[i] = i;
  }

  int root(int x) {
    if (par[x] == x)
      return x;
    return par[x] = root(par[x]);
  }

  void unite(int x, int y) {
    int rx = root(x);
    int ry = root(y);
    if (rx == ry)
      return;
    if (sizes[x] < sizes[y])
      swap(x, y);
    par[ry] = rx;
    sizes[rx] += sizes[ry];
  }

  bool same(int x, int y) {
    int rx = root(x);
    int ry = root(y);
    return rx == ry;
  }

  int size(int x) { return sizes[root(x)]; }
};

int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);

  int n;
  cin >> n;

  int ans = 0;
  for (int a = 1; a < n; ++a) {
    ans += (n - 1) / a;
  }
  cout << ans << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define ll long long int
#define ull unsigned long long int
#define forr(i, n) for (int i = 0; i < n; i++)
#define f(i, a, b) for (ll i = a; i < b; i++)
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define endl '\\n'
#define ce(ele) cout << ele << ' '
#define cs(ele) cout << ele << '\\n'
#define CASE(t)                                                                \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)
#define sor(v) sort(v.begin(), v.end())
#define rev(v) reverse(v.begin(), v.end())
#define vi vector<ll>
const ll md = 1e9 + 7;
const ll M1 = 998244353;
ll mod(ll n) { return ((n % md) + md) % md; }
ll power(ll x, ll y) {
  ll res = 1;
  x = x;
  while (y > 0) {
    if (y & 1)
      res = res * x;
    x = x * x;
    y = y >> 1;
  }
  return res;
}
ll isprime(ll n) {
  ll cnt = 0;
  for (ll i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      if (n / i == i)
        cnt++;
      else
        cnt += 2;
    }
  }
  return cnt;
}

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);

  ll n;
  cin >> n;
  ll cnt = 0;
  f(i, 1, n) { cnt += isprime(n - i); }
  cs(cnt);
}

#include <bits/stdc++.h>
using namespace std;

#define ll long long int
#define ull unsigned long long int
#define forr(i, n) for (int i = 0; i < n; i++)
#define f(i, a, b) for (ll i = a; i < b; i++)
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define endl '\\n'
#define ce(ele) cout << ele << ' '
#define cs(ele) cout << ele << '\\n'
#define CASE(t)                                                                \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)
#define sor(v) sort(v.begin(), v.end())
#define rev(v) reverse(v.begin(), v.end())
#define vi vector<ll>
const ll md = 1e9 + 7;
const ll M1 = 998244353;
ll mod(ll n) { return ((n % md) + md) % md; }
ll power(ll x, ll y) {
  ll res = 1;
  x = x;
  while (y > 0) {
    if (y & 1)
      res = res * x;
    x = x * x;
    y = y >> 1;
  }
  return res;
}

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);

  ll n;
  cin >> n;
  ll cnt = 0;
  f(i, 1, n) { cnt += (n - 1) / i; }
  cs(cnt);
}


#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(v) v.begin(), v.end()
using ll = long long;
using P = pair<int, int>;
int insum(int n) {
  int sum = 0;
  for (int i = 1; i < n; i++) {
    if (sqrt(n) < i)
      break;
    if (n % i == 0) {
      sum += 2;
      if (i == (n + i - 1) / i)
        sum--;
    }
  }
  return sum;
}
int main() {
  int n;
  cin >> n;
  int a, b, c, result = 0, karesult = 0;
  rep(i, n - 1) {
    c = i + 1;
    karesult = insum(n - c);
    result += karesult;
  }
  result++;
  cout << result << endl;
}

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(v) v.begin(), v.end()
using ll = long long;
using P = pair<int, int>;
int insum(int n) {
  int sum = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      sum += 2;
      if (i == sqrt(n))
        sum--;
    }
  }
  return sum;
}
int main() {
  int n;
  cin >> n;
  int a, b, c, result = 0, karesult = 0;
  rep(i, n - 1) {
    c = i + 1;
    karesult = insum(n - c);
    result += karesult;
  }
  cout << result << endl;
}


#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define all(sdk) sdk.begin(), sdk.end()
#define mll map<ll, ll>
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define rep(i, a, b) for (ll i = a; i < b; ++i)
#define repd(i, a, b) for (ll i = a; i >= b; --i)
// #define mp make_pair
#define hell 1000000007
#define endl '\\n'
#define vvll vector<vector<int>>
#define vll vector<int>
#define mint map<int, int>
#define sz(x) (int)x.size()
#define sll set<int>
#define pll pair<int, int>
#define F first
#define S second
#define INF 1e18
#define inf 1e10
#define NINF -1e16

#define N 1000005
int spf[N];
vll primes, prev[N], next[N];
set<int> s;
void sieve() {
  rep(i, 2, N) {
    if (spf[i] == 0) {
      spf[i] = i;
      for (int j = 2 * i; j <= N; j += i) {
        if (spf[j] == 0)
          spf[j] = i;
      }
    }
  }
}
void SieveOfEratosthenes(int n) {
  bool prime[n + 1];
  memset(prime, true, sizeof(prime));

  for (int p = 2; p * p <= n; p++) {
    if (prime[p] == true) {
      for (int i = p * 2; i <= n; i += p)
        prime[i] = false;
    }
  }
  for (int p = 2; p <= n; p++) {
    if (prime[p]) {
      primes.pb(p);
      s.insert(p);
    }
  }
}
// bool isPrime(ll n)
// {
//     if (n <= 1)
//         return false;
//     if (n <= 3)
//         return true;
//     if (n % 2 == 0 || n % 3 == 0)
//         return false;
//     for (int i = 5; i * i <= n; i = i + 6)
//         if (n % i == 0 || n % (i + 2) == 0)
//             return false;
//     return true;
// }
// ll power(ll x,ll y)
// {
//     ll X=x;
//     //X=X%p;//if x is greater than p
//     if(X==0)
//     {
//         return 0;
//     }
//     ll res=1ll;
//     while(y>0)
//     {
//         if(y&1)
//         {
//             res=((res)*(X));
//             y--;
//         }
//         y=y>>1;
//         X=((X)*(X));
//     }
//     // res=(res>=0)?(res%p):(res+p)%p;
//     return(res);
// }
// void dfs(int u, int par){
//     cnt[u] = 1;
//     p[u] = par;
//     for(int i : g[u]){
//         if(i != par){
//             dfs(i,u);
//             cnt[u] += cnt[i];
//         }
//     }
// }
// int children(vll v[],int parent,int src,vll& chil)
// {
// 	int ans =0;
// 	for(auto it:v[src])
// 	{
// 		if(it!=parent)
// 		{
// 			ans+= 1+children(v,src,it,chil);
// 		}
// 	}
// 	chil[src] = ans;
// 	return ans;

// }
bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
  if (a.F == b.F)
    return a.S < b.S;
  else
    return a.F > b.F;
}
signed main() {
  // freopen("output.txt","w",stdout);
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  srand(static_cast<unsigned>(time(0)));
  SieveOfEratosthenes(1000005);
  // 	sort(all(primes));
  sieve();
  int t = 1;
  // cin >> t;
  while (t--) {
    int n, res = 0;
    cin >> n;
    rep(i, 1, n) {
      int a = i, x = n - i, c = 0;
      if (s.find(x) != s.end()) {
        res += 2;
        continue;
      }
      for (int j = 1; j * j < x; j++) {
        if (x % j == 0)
          c++;
      }
      // cout <<x <<"  "<<c<<endl;
      res += c * 2;
      double sq = sqrt(x);
      if (ceil(sq) == sq)
        res++;
    }
    cout << res;
  }
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define all(sdk) sdk.begin(), sdk.end()
#define mll map<ll, ll>
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define rep(i, a, b) for (ll i = a; i < b; ++i)
#define repd(i, a, b) for (ll i = a; i >= b; --i)
// #define mp make_pair
#define hell 1000000007
#define endl '\\n'
#define vvll vector<vector<int>>
#define vll vector<int>
#define mint map<int, int>
#define sz(x) (int)x.size()
#define sll set<int>
#define pll pair<int, int>
#define F first
#define S second
#define INF 1e18
#define inf 1e10
#define NINF -1e16

#define N 1000005
int spf[N];
vll primes, prev[N], next[N];
set<int> s;
void sieve() {
  rep(i, 2, N) {
    if (spf[i] == 0) {
      spf[i] = i;
      for (int j = 2 * i; j <= N; j += i) {
        if (spf[j] == 0)
          spf[j] = i;
      }
    }
  }
}
void SieveOfEratosthenes(int n) {
  bool prime[n + 1];
  memset(prime, true, sizeof(prime));

  for (int p = 2; p * p <= n; p++) {
    if (prime[p] == true) {
      for (int i = p * 2; i <= n; i += p)
        prime[i] = false;
    }
  }
  for (int p = 2; p <= n; p++) {
    if (prime[p]) {
      primes.pb(p);
      s.insert(p);
    }
  }
}
// bool isPrime(ll n)
// {
//     if (n <= 1)
//         return false;
//     if (n <= 3)
//         return true;
//     if (n % 2 == 0 || n % 3 == 0)
//         return false;
//     for (int i = 5; i * i <= n; i = i + 6)
//         if (n % i == 0 || n % (i + 2) == 0)
//             return false;
//     return true;
// }
// ll power(ll x,ll y)
// {
//     ll X=x;
//     //X=X%p;//if x is greater than p
//     if(X==0)
//     {
//         return 0;
//     }
//     ll res=1ll;
//     while(y>0)
//     {
//         if(y&1)
//         {
//             res=((res)*(X));
//             y--;
//         }
//         y=y>>1;
//         X=((X)*(X));
//     }
//     // res=(res>=0)?(res%p):(res+p)%p;
//     return(res);
// }
// void dfs(int u, int par){
//     cnt[u] = 1;
//     p[u] = par;
//     for(int i : g[u]){
//         if(i != par){
//             dfs(i,u);
//             cnt[u] += cnt[i];
//         }
//     }
// }
// int children(vll v[],int parent,int src,vll& chil)
// {
// 	int ans =0;
// 	for(auto it:v[src])
// 	{
// 		if(it!=parent)
// 		{
// 			ans+= 1+children(v,src,it,chil);
// 		}
// 	}
// 	chil[src] = ans;
// 	return ans;

// }
bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
  if (a.F == b.F)
    return a.S < b.S;
  else
    return a.F > b.F;
}
signed main() {
  // freopen("output.txt","w",stdout);
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  srand(static_cast<unsigned>(time(0)));
  SieveOfEratosthenes(1000005);
  // 	sort(all(primes));
  sieve();
  int t = 1;
  // cin >> t;
  while (t--) {
    int n, res = 0;
    cin >> n;
    rep(i, 1, n) {
      int a = i, x = n - i, c = 1;
      if (s.find(x) != s.end()) {
        res += 2;
        continue;
      }
      if (x == 1) {
        res++;
        continue;
      }
      int temp = x;
      while (x > 1) {
        int m = spf[x], d = 0;
        while (x % m == 0) {
          d++;
          x /= m;
        }
        c *= (d + 1);
      }

      // cout <<temp <<"  "<<c<<endl;
      res += c;
      // double sq=sqrt(x);
      // if (ceil(sq)==sq)
      // res++;
    }
    cout << res;
  }
  return 0;
}


#include <bits/stdc++.h>
#include <iostream>
#define ll long long int
#define lld long double
#define F first
#define S second
#define f(i, a, b) for (int i = a; i <= b; i++)
#define g(i, a, b) for (int i = a; i >= b; i--)
#define pb push_back
#define mh make_heap
#define ph push_heap
#define pq priority_queue
#define bits(x) __builtin_popcountll(x)
#define op(x) cout << "Case #" << x << ": "
#define op1(x) cout << "Scenario #" << x << ": "
#define endl "\\n"
using namespace std;
const ll mod = 1000000007;
const ll INF = LLONG_MAX;
const ll NEGINF = LLONG_MIN;
const int N = 18;
const ll MAXN = 1000001;

void solve(int t) {

  int n;
  cin >> n;

  ll cnt = 0;

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

    for (int j = 1; j * j <= x; j++) {
      if (x % j == 0) {
        if (j == x / j)
          cnt++;
        else
          cnt += 2;
      }
    }
  }

  cout << cnt << endl;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  int t = 1;
  // cin >> t;

  for (int i = 1; i <= t; i++) {
    solve(i);
  }
}

#include <bits/stdc++.h>
#include <iostream>
#define ll long long int
#define lld long double
#define F first
#define S second
#define f(i, a, b) for (int i = a; i <= b; i++)
#define g(i, a, b) for (int i = a; i >= b; i--)
#define pb push_back
#define mh make_heap
#define ph push_heap
#define pq priority_queue
#define bits(x) __builtin_popcountll(x)
#define op(x) cout << "Case #" << x << ": "
#define op1(x) cout << "Scenario #" << x << ": "
#define endl "\\n"
using namespace std;
const ll mod = 1000000007;
const ll INF = LLONG_MAX;
const ll NEGINF = LLONG_MIN;
const int N = 18;
const ll MAXN = 1000001;

#define MAXN 1000001
ll spf[MAXN];

void sieve() {
  spf[1] = 1;
  for (ll i = 2; i < MAXN; i++)

    spf[i] = i;

  for (int i = 4; i < MAXN; i += 2)
    spf[i] = 2;

  for (int i = 3; i * i < MAXN; i++) {
    if (spf[i] == i) {
      for (int j = i * i; j < MAXN; j += i)

        if (spf[j] == j)
          spf[j] = i;
    }
  }
}

void solve(int t) {

  sieve();
  int n;
  cin >> n;

  ll cnt = 0;

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

    map<ll, ll> m;
    while (x != 1) {
      m[spf[x]]++;
      x = x / spf[x];
    }
    ll p = 1;

    for (auto i : m)
      p *= (i.S + 1);

    cnt += p;
  }

  cout << cnt << endl;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  int t = 1;
  // cin >> t;

  for (int i = 1; i <= t; i++) {
    solve(i);
  }
}


// Problem : C - A x B + C
// Contest : AtCoder - AtCoder Beginner Contest 179
// URL : https://atcoder.jp/contests/abc179/tasks/abc179_c
// Memory Limit : 1024 MB
// Time Limit : 2000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("-Ofast")
#pragma GCC optimize("trapv")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
// #pragma GCC optimize("-O2")
// #pragma GCC target("AVX")
#define endl '\\n'
#define rep() for (LL i = 0; i < n; i++)
#define f(i, s, n) for (LL i = s; i < n; i++)
#define fe(i, s, n) for (LL i = s; i <= n; i++)
#define rfe(i, s, n) for (LL i = s; i >= n; i--)
#define auto(m) for (auto &it : m)
#define f2(it, v) for (it = v.begin(); it != v.end(); ++it)
#define fori(it, x)                                                            \\
  for (__typeof((x).begin()) it = (x).begin(); it != (x).end(); it++)
#define ip(n, a)                                                               \\
  LL n;                                                                        \\
  cin >> n;                                                                    \\
  LL a[n];                                                                     \\
  rep() { cin >> a[i]; }
#define op(n, a)                                                               \\
  f(i, 0, n) { cout << a[i] << " "; }                                          \\
  cout << endl;
#define i2p(n, k, a)                                                           \\
  LL n, k;                                                                     \\
  cin >> n >> k;                                                               \\
  LL a[n];                                                                     \\
  rep { cin >> a[i]; }
#define TCs(x)                                                                 \\
  LL x;                                                                        \\
  cin >> x;                                                                    \\
  while (x--)
#define TC(x)                                                                  \\
  LL x = 1;                                                                    \\
  while (x--)
#define mp make_pair
#define pb push_back
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define mem(a, x) memset(a, x, sizeof(a))
#define Max(x, y, z) max(x, max(y, z))
#define Min(x, y, z) min(x, min(y, z))
#define fastIO                                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
#define ps(x)                                                                  \\
  std::cout << std::fixed;                                                     \\
  std::cout << std::setprecision(x);
#define clz(a)                                                                 \\
  __builtin_clz(a) // count leading zeroes
                   // (geeksforgeeks.org/builtin-functions-gcc-compiler/)
#define ctz(a) __builtin_ctz(a) // count trailing zeroes
#define popc(a)                                                                \\
  __builtin_popcount(a) // count set bits (for ints only diff for ll)
#define GCD(A, B) __gcd(A, B)
#define d1(x) cout << #x << ": " << x << endl
#define d2(x, y) cout << #x << ": " << x << " | " << #y << ": " << y << endl
#define d3(x, y, z)                                                            \\
  cout << #x << ":" << x << " | " << #y << ": " << y << " | " << #z << ": "    \\
       << z << endl
#define d4(a, b, c, d)                                                         \\
  cout << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": "   \\
       << c << " | " << #d << ": " << d << endl
#define d5(a, b, c, d, e)                                                      \\
  cout << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": "   \\
       << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl
#define d6(a, b, c, d, e, f)                                                   \\
  cout << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": "   \\
       << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | "   \\
       << #f << ": " << f << endl
#define c1(a)                                                                  \\
  ;                                                                            \\
  LL a;                                                                        \\
  cin >> a;
#define c2(a, b)                                                               \\
  ;                                                                            \\
  LL a, b;                                                                     \\
  cin >> a >> b;
#define c3(a, b, c)                                                            \\
  ;                                                                            \\
  LL a, b, c;                                                                  \\
  cin >> a >> b >> c;
#define c4(a, b, c, d)                                                         \\
  ;                                                                            \\
  LL a, b, c, d;                                                               \\
  cin >> a >> b >> c >> d;
#define c5(a, b, c, d, e)                                                      \\
  ;                                                                            \\
  LL a, b, c, d, e;                                                            \\
  cin >> a >> b >> c >> d >> e;
#define c6(a, b, c, d, e, f)                                                   \\
  ;                                                                            \\
  LL a, b, c, d, e, f;                                                         \\
  cin >> a >> b >> c >> d >> e >> f;
#define c(a, n)                                                                \\
  ;                                                                            \\
  LL a[n];                                                                     \\
  f(i, 0, n) { cin >> a[i]; }
#define ce(a, n)                                                               \\
  ;                                                                            \\
  LL a[n + 1];                                                                 \\
  fe(i, 1, n) { cin >> a[i]; }
#define imin INT_MIN
#define imax INT_MAX

// Typedefs:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
typedef string S;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef vector<long long> VL;
typedef vector<VL> VVL;
typedef vector<string> VS;
typedef vector<char> VC;
typedef pair<LL, LL> PLL;
typedef pair<string, LL> PSL;
typedef pair<LL, string> PLS;
typedef pair<char, LL> PCL;
typedef pair<LL, char> PLC;
typedef pair<string, string> PSS;
typedef pair<char, char> PCC;
typedef vector<PLL> VPLL;
typedef vector<PSL> VPSL;
typedef vector<PLS> VPLS;
typedef vector<PCL> VPCL;
typedef vector<PLC> VPLC;
typedef vector<PSS> VPSS;
typedef vector<PCC> VPCC;
typedef map<LL, LL> MLL;
typedef map<string, LL> MSL;
typedef map<char, LL> MCL;
typedef map<char, char> MCC;
typedef set<LL> SL;
typedef set<string> SS;
typedef set<char> SC;

int power(LL x, LL y) {
  if (y == 0)
    return 1;
  LL p = power(x, y / 2);
  p = (p * p);

  return (y % 2 == 0) ? p : (x * p);
}
const long long N = (long long)(1e5 + 1);
const long long N2 = (long long)(1e6 + 1);
const long long MOD = (long long)(1e9 + 7);
const long long INF = (long long)(2e18);

void solve() {
  LL n;
  cin >> n;
  LL ans = 0;
  fe(i, 1, n - 1) {
    LL m = n - i;
    LL x = sqrt(m);
    for (LL j = 1; j <= x; j++) {
      if (m % j == 0) {
        if (m / j == j) {

          ans++;
          // d3(m,j,ans);
        } else {
          ans += 2;
          // d3(m,j,ans);
        }
      }
    }
  }
  cout << ans << endl;
}
int main() {
  fastIO TC(t) { solve(); }
  return 0;
}

// Problem : C - A x B + C
// Contest : AtCoder - AtCoder Beginner Contest 179
// URL : https://atcoder.jp/contests/abc179/tasks/abc179_c
// Memory Limit : 1024 MB
// Time Limit : 2000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("-Ofast")
#pragma GCC optimize("trapv")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
// #pragma GCC optimize("-O2")
// #pragma GCC target("AVX")
#define endl '\\n'
#define rep() for (LL i = 0; i < n; i++)
#define f(i, s, n) for (LL i = s; i < n; i++)
#define fe(i, s, n) for (LL i = s; i <= n; i++)
#define rfe(i, s, n) for (LL i = s; i >= n; i--)
#define auto(m) for (auto &it : m)
#define f2(it, v) for (it = v.begin(); it != v.end(); ++it)
#define fori(it, x)                                                            \\
  for (__typeof((x).begin()) it = (x).begin(); it != (x).end(); it++)
#define ip(n, a)                                                               \\
  LL n;                                                                        \\
  cin >> n;                                                                    \\
  LL a[n];                                                                     \\
  rep() { cin >> a[i]; }
#define op(n, a)                                                               \\
  f(i, 0, n) { cout << a[i] << " "; }                                          \\
  cout << endl;
#define i2p(n, k, a)                                                           \\
  LL n, k;                                                                     \\
  cin >> n >> k;                                                               \\
  LL a[n];                                                                     \\
  rep { cin >> a[i]; }
#define TCs(x)                                                                 \\
  LL x;                                                                        \\
  cin >> x;                                                                    \\
  while (x--)
#define TC(x)                                                                  \\
  LL x = 1;                                                                    \\
  while (x--)
#define mp make_pair
#define pb push_back
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define mem(a, x) memset(a, x, sizeof(a))
#define Max(x, y, z) max(x, max(y, z))
#define Min(x, y, z) min(x, min(y, z))
#define fastIO                                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
#define ps(x)                                                                  \\
  std::cout << std::fixed;                                                     \\
  std::cout << std::setprecision(x);
#define clz(a)                                                                 \\
  __builtin_clz(a) // count leading zeroes
                   // (geeksforgeeks.org/builtin-functions-gcc-compiler/)
#define ctz(a) __builtin_ctz(a) // count trailing zeroes
#define popc(a)                                                                \\
  __builtin_popcount(a) // count set bits (for ints only diff for ll)
#define GCD(A, B) __gcd(A, B)
#define d1(x) cout << #x << ": " << x << endl
#define d2(x, y) cout << #x << ": " << x << " | " << #y << ": " << y << endl
#define d3(x, y, z)                                                            \\
  cout << #x << ":" << x << " | " << #y << ": " << y << " | " << #z << ": "    \\
       << z << endl
#define d4(a, b, c, d)                                                         \\
  cout << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": "   \\
       << c << " | " << #d << ": " << d << endl
#define d5(a, b, c, d, e)                                                      \\
  cout << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": "   \\
       << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl
#define d6(a, b, c, d, e, f)                                                   \\
  cout << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": "   \\
       << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | "   \\
       << #f << ": " << f << endl
#define c1(a)                                                                  \\
  ;                                                                            \\
  LL a;                                                                        \\
  cin >> a;
#define c2(a, b)                                                               \\
  ;                                                                            \\
  LL a, b;                                                                     \\
  cin >> a >> b;
#define c3(a, b, c)                                                            \\
  ;                                                                            \\
  LL a, b, c;                                                                  \\
  cin >> a >> b >> c;
#define c4(a, b, c, d)                                                         \\
  ;                                                                            \\
  LL a, b, c, d;                                                               \\
  cin >> a >> b >> c >> d;
#define c5(a, b, c, d, e)                                                      \\
  ;                                                                            \\
  LL a, b, c, d, e;                                                            \\
  cin >> a >> b >> c >> d >> e;
#define c6(a, b, c, d, e, f)                                                   \\
  ;                                                                            \\
  LL a, b, c, d, e, f;                                                         \\
  cin >> a >> b >> c >> d >> e >> f;
#define c(a, n)                                                                \\
  ;                                                                            \\
  LL a[n];                                                                     \\
  f(i, 0, n) { cin >> a[i]; }
#define ce(a, n)                                                               \\
  ;                                                                            \\
  LL a[n + 1];                                                                 \\
  fe(i, 1, n) { cin >> a[i]; }
#define imin INT_MIN
#define imax INT_MAX

// Typedefs:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
typedef string S;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef vector<long long> VL;
typedef vector<VL> VVL;
typedef vector<string> VS;
typedef vector<char> VC;
typedef pair<LL, LL> PLL;
typedef pair<string, LL> PSL;
typedef pair<LL, string> PLS;
typedef pair<char, LL> PCL;
typedef pair<LL, char> PLC;
typedef pair<string, string> PSS;
typedef pair<char, char> PCC;
typedef vector<PLL> VPLL;
typedef vector<PSL> VPSL;
typedef vector<PLS> VPLS;
typedef vector<PCL> VPCL;
typedef vector<PLC> VPLC;
typedef vector<PSS> VPSS;
typedef vector<PCC> VPCC;
typedef map<LL, LL> MLL;
typedef map<string, LL> MSL;
typedef map<char, LL> MCL;
typedef map<char, char> MCC;
typedef set<LL> SL;
typedef set<string> SS;
typedef set<char> SC;

int power(LL x, LL y) {
  if (y == 0)
    return 1;
  LL p = power(x, y / 2);
  p = (p * p);

  return (y % 2 == 0) ? p : (x * p);
}
const long long N = (long long)(1e6 + 1);
const long long MOD = (long long)(1e9 + 7);
const long long INF = (long long)(2e18);
const int MAX = 1000001;

LL factor[MAX] = {0};
void generatePrimeFactors() // GFG
{
  factor[1] = 1;

  for (LL i = 2; i < MAX; i++)
    factor[i] = i;

  for (LL i = 4; i < MAX; i += 2)
    factor[i] = 2;

  // A modified version of Sieve of Eratosthenes to
  // store the smallest prime factor that divides
  // every number.
  for (LL i = 3; i * i < MAX; i++) {
    // check if it has no prime factor.
    if (factor[i] == i) {
      // Initializes of j starting from i*i
      for (int j = i * i; j < MAX; j += i) {
        // if it has no prime factor before, then
        // stores the smallest prime divisor
        if (factor[j] == j)
          factor[j] = i;
      }
    }
  }
}

// function to calculate number of factors
LL calculateNoOFactors(LL n) // GFG
{
  if (n == 1)
    return 1;

  LL ans = 1;

  // stores the smallest prime number
  // that divides n
  LL dup = factor[n];

  // stores the count of number of times
  // a prime number divides n.
  LL c = 1;

  // reduces to the next number after prime
  // factorization of n
  LL j = n / factor[n];

  // false when prime factorization is done
  while (j != 1) {
    // if the same prime number is dividing n,
    // then we increase the count
    if (factor[j] == dup)
      c += 1;

    /* if its a new prime factor that is factorizing n,
       then we again set c=1 and change dup to the new
       prime factor, and apply the formula explained
       above. */
    else {
      dup = factor[j];
      ans = ans * (c + 1);
      c = 1;
    }

    // prime factorizes a number
    j = j / factor[j];
  }

  // for the last prime factor
  ans = ans * (c + 1);

  return ans;
}
void solve() {
  generatePrimeFactors();
  LL n;
  cin >> n;
  LL ans = 0;
  fe(i, 1, n - 1) {
    LL m = n - i;
    ans += calculateNoOFactors(m);
    // d2(m,ans);
  }
  cout << ans << endl;
}
int main() {
  fastIO TC(t) { solve(); }
  return 0;
}


/*
    quid-pro-quo: LOGIC for AC
    written by: codercell07
    LANG: C++ 11
    Problem: random
*/
#include <bits/stdc++.h>
#define fastio                                                                 \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(NULL)
#define testcases                                                              \\
  freopen("input.txt", "r", stdin);                                            \\
  freopen("output.txt", "w", stdout)
#define ui unsigned int
#define ll long long
#define pb push_back
#define vi vector<int>
#define vvi vector<vector<int>>
#define vll vector<ll>
#define vvll vector<vector<ll>>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define sz(x) (int)x.size()
#define pq priority_queue /*maxim at top(max-heap)*/
#define pqmax                                                                  \\
  priority_queue<int, vector<int>, greater<int>> /*minim at top(min-heap)*/
#define mp make_pair
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define asc(x) sort(all(x))
#define desc(x) sort(all(x), greater<int>())
#define time_el (double)time / CLOCKS_PER_SEC
using namespace std;
const int MAX = 2e6; // dummy, make sure change as per constraints
const ll M = 1e9 + 7, inf = 1e18;
const char nl = '\\n';

ll apbmc(ll a, ll b, ll c) {
  a %= c;
  ll res = 1;
  while (b) {
    if (b & 1)
      res = res * a % c;
    a = a * a % c;
    b >>= 1;
  }
  return res;
}
ll apb(ll x, ll y) {
  ll temp;
  if (y == 0)
    return 1;
  temp = apb(x, y / 2);
  if (y % 2 == 0)
    return temp * temp;
  else
    return temp * temp * x;
}

void solve() {
  // clock_t time;
  int n;
  cin >> n;
  int a, b, c, cnt = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      for (int k = 1; k <= n; k++) {
        if (i * j + k == n)
          cnt++;
      }
    }
  }
  cout << cnt;
}
int main() {
  fastio;
  // #ifndef ONLINE_JUDGE
  //     testcases;
  // #endif // !DEBUG
  cout << fixed << setprecision(10);

  // int t; cin>>t; while(t--) solve();
  solve();

  return 0;
}
// points to check:
//   * check for constraints, mainly array!
//   * EDGE CASES
//   * check for integer overflow, use long long!
//   * learn, do, solve, share something, NOW!

/*
    quid-pro-quo: LOGIC for AC
    written by: codercell07
    LANG: C++ 11
    Problem: random
*/
#include <bits/stdc++.h>
#define fastio                                                                 \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(NULL)
#define testcases                                                              \\
  freopen("input.txt", "r", stdin);                                            \\
  freopen("output.txt", "w", stdout)
#define ui unsigned int
#define ll long long
#define pb push_back
#define vi vector<int>
#define vvi vector<vector<int>>
#define vll vector<ll>
#define vvll vector<vector<ll>>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define sz(x) (int)x.size()
#define pq priority_queue /*maxim at top(max-heap)*/
#define pqmax                                                                  \\
  priority_queue<int, vector<int>, greater<int>> /*minim at top(min-heap)*/
#define mp make_pair
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define asc(x) sort(all(x))
#define desc(x) sort(all(x), greater<int>())
#define time_el (double)time / CLOCKS_PER_SEC
using namespace std;
const int MAX = 2e6; // dummy, make sure change as per constraints
const ll M = 1e9 + 7, inf = 1e18;
const char nl = '\\n';

ll apbmc(ll a, ll b, ll c) {
  a %= c;
  ll res = 1;
  while (b) {
    if (b & 1)
      res = res * a % c;
    a = a * a % c;
    b >>= 1;
  }
  return res;
}
ll apb(ll x, ll y) {
  ll temp;
  if (y == 0)
    return 1;
  temp = apb(x, y / 2);
  if (y % 2 == 0)
    return temp * temp;
  else
    return temp * temp * x;
}

void solve() {
  // clock_t time;
  ll n;
  cin >> n;
  int cnt = 0;
  for (ll i = 1; i < n; i++) {
    for (ll j = 1; j < n, i * j < n; j++) {
      if (i * j >= 1 and i * j < n)
        cnt++;
    }
  }
  cout << cnt;
}
int main() {
  fastio;
  // #ifndef ONLINE_JUDGE
  //     testcases;
  // #endif // !DEBUG
  cout << fixed << setprecision(10);

  // int t; cin>>t; while(t--) solve();
  solve();

  return 0;
}
// points to check:
//   * check for constraints, mainly array!
//   * EDGE CASES
//   * check for integer overflow, use long long!
//   * learn, do, solve, share something, NOW!


// Problem : C - A x B + C
// Contest : AtCoder - AtCoder Beginner Contest 179
// URL : https://atcoder.jp/contests/abc179/tasks/abc179_c
// Memory Limit : 1024 MB
// Time Limit : 2000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

// Delete the dynamically allocated memory

#include <bits/stdc++.h>
using namespace std;

#define ff first
#define ss second
#define pb push_back
#define pr pair<long long, long long>
#define mp(a, b) make_pair(a, b)
#define vr vector<long long>
#define mod1 1000000007
#define mod2 998244353
#define inf 1e18
#define ps(x, y) fixed << setprecision(y) << x
#define fill(a, b) memset(a, b, sizeof(a))
#define mk(arr, n, type) type *arr = new type[n];
#define ll long long
#define ld long double
#define w(x)                                                                   \\
  int x;                                                                       \\
  cin >> x;                                                                    \\
  while (x--)
void SieveOfEratosthenes(int n, bool prime[], bool primesquare[], int a[]) {
  // Create a boolean array "prime[0..n]" and
  // initialize all entries it as true. A value
  // in prime[i] will finally be false if i is
  // Not a prime, else true.
  for (int i = 2; i <= n; i++)
    prime[i] = true;

  // Create a boolean array "primesquare[0..n*n+1]"
  // and initialize all entries it as false. A value
  // in squareprime[i] will finally be true if i is
  // square of prime, else false.
  for (int i = 0; i <= (n * n + 1); i++)
    primesquare[i] = false;

  // 1 is not a prime number
  prime[1] = false;

  for (int p = 2; p * p <= n; p++) {
    // If prime[p] is not changed, then
    // it is a prime
    if (prime[p] == true) {
      // Update all multiples of p
      for (int i = p * 2; i <= n; i += p)
        prime[i] = false;
    }
  }

  int j = 0;
  for (int p = 2; p <= n; p++) {
    if (prime[p]) {
      // Storing primes in an array
      a[j] = p;

      // Update value in primesquare[p*p],
      // if p is prime.
      primesquare[p * p] = true;
      j++;
    }
  }
}

// Function to count divisors
int countDivisors(int n) {
  // If number is 1, then it will have only 1
  // as a factor. So, total factors will be 1.
  if (n == 1)
    return 1;

  bool prime[n + 1], primesquare[n * n + 1];

  int a[n]; // for storing primes upto n

  // Calling SieveOfEratosthenes to store prime
  // factors of n and to store square of prime
  // factors of n
  SieveOfEratosthenes(n, prime, primesquare, a);

  // ans will contain total number of distinct
  // divisors
  int ans = 1;

  // Loop for counting factors of n
  for (int i = 0;; i++) {
    // a[i] is not less than cube root n
    if (a[i] * a[i] * a[i] > n)
      break;

    // Calculating power of a[i] in n.
    int cnt = 1;          // cnt is power of prime a[i] in n.
    while (n % a[i] == 0) // if a[i] is a factor of n
    {
      n = n / a[i];
      cnt = cnt + 1; // incrementing power
    }

    // Calculating the number of divisors
    // If n = a^p * b^q then total divisors of n
    // are (p+1)*(q+1)
    ans = ans * cnt;
  }

  // if a[i] is greater than cube root of n

  // First case
  if (prime[n])
    ans = ans * 2;

  // Second case
  else if (primesquare[n])
    ans = ans * 3;

  // Third case
  else if (n != 1)
    ans = ans * 4;

  return ans; // Total divisors
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n;
  cin >> n;
  int sum = 0;
  for (int i = 1; i < n; i++) {
    int v = countDivisors(i);
    sum += v;
  }
  cout << sum << "\\n";
  return 0;
}

// Delete the dynamically allocated memory

#include <bits/stdc++.h>
using namespace std;

#define ff first
#define ss second
#define pb push_back
#define pr pair<long long, long long>
#define mp(a, b) make_pair(a, b)
#define vr vector<long long>
#define mod1 1000000007
#define mod2 998244353
#define inf 1e18
#define ps(x, y) fixed << setprecision(y) << x
#define fill(a, b) memset(a, b, sizeof(a))
#define mk(arr, n, type) type *arr = new type[n];
#define ll long long
#define ld long double
#define w(x)                                                                   \\
  int x;                                                                       \\
  cin >> x;                                                                    \\
  while (x--)

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ll n;
  cin >> n;
  ll sum = 0;
  for (ll i = 1; i <= n; i++) {
    sum += (n / i);
    if (n % i == 0) {
      sum--;
    }
  }
  cout << sum << "\\n";
  return 0;
}


#include <bits/stdc++.h>
#define ll long long
const int md = 1000000007;
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
/* VECTORS */
#define pb push_back
#define g(v, i, j) get<i>(v[j])
#define co(v, x) count(v.begin(), v.end(), x)
#define mxe(v) *max_element(v.begin(), v.end())
#define mne(v) *min_element(v.begin(), v.end())
#define vi vector<int>
#define vll vector<ll>
#define srt(v) sort(v.begin(), v.end())
#define rsrt(v) sort(v.begin(), v.end(), greater<int>())
/* INPUT/OUTPUT*/
#define pr printf
#define sc scanf
#define pi(a) printf("%d\\n", a)
#define pll(a) printf("%lld\\n", a)
#define si(a) scanf("%d", &a)
#define sll(a) scanf("%lld", &a)
/* LOOPS*/
#define fi(i, a, b) for (int i = a; i < b; i++)
#define fll(i, a, b) for (ll i = a; i < b; i++)
using namespace std;
using namespace std::chrono;
ll pw(ll a, ll b) {
  ll c = 1, m = a;
  while (b) {
    if (b & 1)
      c = (c * m);
    m = (m * m);
    b /= 2;
  }
  return c;
}
ll pwmd(ll a, ll b) {
  ll c = 1, m = a;
  while (b) {
    if (b & 1)
      c = (c * m) % md;
    m = (m * m) % md;
    b /= 2;
  }
  return c;
}
ll modinv(ll n) { return pwmd(n, md - 2); }
ll inverse(ll i) {
  if (i == 1)
    return 1;
  return (md - ((md / i) * inverse(md % i)) % md + md) % md;
}
ll ceel(ll a, ll b) {
  if (a % b == 0)
    return a / b;
  else
    return a / b + 1;
}
ll my_log(ll n, ll b) {
  ll i = 1;
  ll ans = 0;
  while (1) {
    if (i > n) {
      ans--;
      break;
    }
    if (i == n)
      break;
    i *= b;
    ans++;
  }
  return ans;
}
bool sortbysec(const pair<ll, ll> &a, const pair<ll, ll> &b) {
  return (a.second < b.second);
}
/* auto start = high_resolution_clock::now();
 auto stop = high_resolution_clock::now();
 auto duration = duration_cast<microseconds>(stop - start);
 cerr << "Time taken: "
      << duration.count()<< "ms" <<"\\n";*/
ll gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}
vector<char> capl = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
                     'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
                     'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
vector<char> sml = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                    'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                    's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
string conv(ll a) {
  string b;
  ll e = 2;
  ll c = my_log(a, e);
  c++;
  b = '1';
  for (int i = 0; i < c - 1; i++) {
    ll k = a >> (c - 2 - i);
    if (k & 1)
      b += '1';
    else
      b += '0';
  }
  if (a == 0)
    return "0";
  return b;
}
ll mysqt(ll a) {
  ll ans = 1;
  while (ans * ans <= a)
    ans++;
  ans--;
  return ans;
}
bool isprime(int p) {
  int i = 2;
  while (i <= sqrt(p)) {
    if (p % i == 0) {
      return false;
    }
    i++;
  }
  return true;
}
int main() {
  fast;
  int n;
  cin >> n;
  int cnt = 0, i = 1;
  while (i < n) {
    int j = 1;
    int p = n - i;
    while (j <= sqrt(p)) {
      if (p % j == 0) {
        cnt += 2;
        if (j == sqrt(p))
          cnt--;
      }
      j++;
    }
    i++;
  }
  cout << cnt;
}

#include <bits/stdc++.h>
#define ll long long
const int md = 1000000007;
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
/* VECTORS */
#define pb push_back
#define g(v, i, j) get<i>(v[j])
#define co(v, x) count(v.begin(), v.end(), x)
#define mxe(v) *max_element(v.begin(), v.end())
#define mne(v) *min_element(v.begin(), v.end())
#define vi vector<int>
#define vll vector<ll>
#define srt(v) sort(v.begin(), v.end())
#define rsrt(v) sort(v.begin(), v.end(), greater<int>())
/* INPUT/OUTPUT*/
#define pr printf
#define sc scanf
#define pi(a) printf("%d\\n", a)
#define pll(a) printf("%lld\\n", a)
#define si(a) scanf("%d", &a)
#define sll(a) scanf("%lld", &a)
/* LOOPS*/
#define fi(i, a, b) for (int i = a; i < b; i++)
#define fll(i, a, b) for (ll i = a; i < b; i++)
using namespace std;
using namespace std::chrono;
ll pw(ll a, ll b) {
  ll c = 1, m = a;
  while (b) {
    if (b & 1)
      c = (c * m);
    m = (m * m);
    b /= 2;
  }
  return c;
}
ll pwmd(ll a, ll b) {
  ll c = 1, m = a;
  while (b) {
    if (b & 1)
      c = (c * m) % md;
    m = (m * m) % md;
    b /= 2;
  }
  return c;
}
ll modinv(ll n) { return pwmd(n, md - 2); }
ll inverse(ll i) {
  if (i == 1)
    return 1;
  return (md - ((md / i) * inverse(md % i)) % md + md) % md;
}
ll ceel(ll a, ll b) {
  if (a % b == 0)
    return a / b;
  else
    return a / b + 1;
}
ll my_log(ll n, ll b) {
  ll i = 1;
  ll ans = 0;
  while (1) {
    if (i > n) {
      ans--;
      break;
    }
    if (i == n)
      break;
    i *= b;
    ans++;
  }
  return ans;
}
bool sortbysec(const pair<ll, ll> &a, const pair<ll, ll> &b) {
  return (a.second < b.second);
}
/* auto start = high_resolution_clock::now();
 auto stop = high_resolution_clock::now();
 auto duration = duration_cast<microseconds>(stop - start);
 cerr << "Time taken: "
      << duration.count()<< "ms" <<"\\n";*/
ll gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}
vector<char> capl = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
                     'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
                     'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
vector<char> sml = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                    'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                    's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
string conv(ll a) {
  string b;
  ll e = 2;
  ll c = my_log(a, e);
  c++;
  b = '1';
  for (int i = 0; i < c - 1; i++) {
    ll k = a >> (c - 2 - i);
    if (k & 1)
      b += '1';
    else
      b += '0';
  }
  if (a == 0)
    return "0";
  return b;
}
ll mysqt(ll a) {
  ll ans = 1;
  while (ans * ans <= a)
    ans++;
  ans--;
  return ans;
}
bool isprime(int p) {
  int i = 2;
  while (i <= sqrt(p)) {
    if (p % i == 0) {
      return false;
    }
    i++;
  }
  return true;
}
int main() {
  fast;
  int n;
  cin >> n;
  bool prime[1000001];
  memset(prime, true, sizeof(prime));
  for (int p = 2; p * p <= 1000000; p++) {
    if (prime[p] == true) {
      for (int i = p * p; i <= 1000000; i += p)
        prime[i] = false;
    }
  }
  int cnt = 0, i = 1;
  while (i < n) {
    int j = 1;
    int p = n - i;
    if (prime[p] && p >= 2) {
      i++;
      cnt += 2;
      continue;
    }
    while (j <= sqrt(p)) {
      if (p % j == 0) {
        cnt += 2;
        if (j == sqrt(p))
          cnt--;
      }
      j++;
    }
    i++;
  }
  cout << cnt;
}


#include <array>
#include <cmath>
#include <deque>
#include <iostream>
#include <map>
#include <stack>
#include <string>
#include <vector>

#define REP(i, a, b) for (int i = (a); i < b; ++i)
#define inf 1e9 + 10
#define MOD 1000000007

using ll = long long;
using ull = unsigned long long;
using namespace std;

inline ll modpow(ll x, ll n, ll mod) {
  ll res = 1;
  while (n > 0) {
    if (n & 1)
      res = res * x % mod;
    x = x * x % mod;
    n >>= 1;
  }
  return res;
}

inline ll mod(ll val, ll m) {
  ll res = val % m;
  if (res < 0)
    res += m;
  return res;
}

// 素因数分解
template <typename T> map<T, T> prime_factor(T n) {
  map<T, T> ret;
  for (T i = 2; i * i <= n; i++) {
    T tmp = 0;
    while (n % i == 0) {
      tmp++;
      n /= i;
    }
    ret[i] = tmp;
  }
  if (n != 1)
    ret[n] = 1;
  return ret;
}
/*  divisor_num(n)
    入力：整数 n
    出力：nの約数の個数
    計算量：O(√n)
*/
template <typename T> T divisor_num(T N) {
  map<T, T> pf = prime_factor(N);
  T ret = 1;
  for (auto p : pf) {
    ret *= (p.second + 1);
  }
  return ret;
}

int main() {
  ll n;
  cin >> n;

  ll sum = 0;

  for (ll i = 1; i < n; ++i) {
    ll temp = n - i;
    sum += divisor_num(temp);
  }

  cout << sum;

  return 0;
}

#include <array>
#include <cmath>
#include <deque>
#include <iostream>
#include <map>
#include <stack>
#include <string>
#include <vector>

#define REP(i, a, b) for (int i = (a); i < b; ++i)
#define inf 1e9 + 10
#define MOD 1000000007

using ll = long long;
using ull = unsigned long long;
using namespace std;

inline ll modpow(ll x, ll n, ll mod) {
  ll res = 1;
  while (n > 0) {
    if (n & 1)
      res = res * x % mod;
    x = x * x % mod;
    n >>= 1;
  }
  return res;
}

inline ll mod(ll val, ll m) {
  ll res = val % m;
  if (res < 0)
    res += m;
  return res;
}

template <typename T> struct PrimeFact {
  vector<T> spf;
  PrimeFact(T N) { init(N); }
  void init(T N) { // 前処理。spf を求める
    spf.assign(N + 1, 0);
    for (T i = 0; i <= N; i++)
      spf[i] = i;
    for (T i = 2; i * i <= N; i++) {
      if (spf[i] == i) {
        for (T j = i * i; j <= N; j += i) {
          if (spf[j] == j) {
            spf[j] = i;
          }
        }
      }
    }
  }
  map<T, T> get(T n) { // nの素因数分解を求める
    map<T, T> m;
    while (n != 1) {
      m[spf[n]]++;
      n /= spf[n];
    }
    return m;
  }
};

int main() {
  int n;
  cin >> n;
  int sum = 0;
  REP(i, 1, n + 1) { sum += (n - 1) / i; }

  cout << sum;

  return 0;
}


#include <bits/stdc++.h>
#include <boost/dynamic_bitset.hpp>
using namespace std;
using u64 = uint64_t;
using s64 = int64_t;

u64 ps(const u64 k) {
  u64 ans = 0;
  for (u64 i = 1; i <= sqrt(k); i++) {
    if (k % i == 0) {
      ans++;
      if (i * i != k)
        ans++;
    }
  }

  return ans;
}

int main(void) {
  u64 N;
  cin >> N;

  u64 ans = 0;
  for (u64 i = 1; i < N; i++) {
    ans += ps(i);
  }

  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
#include <boost/dynamic_bitset.hpp>
using namespace std;
using u64 = uint64_t;
using s64 = int64_t;

int main(void) {
  u64 N;
  cin >> N;

  u64 ans = 0;
  for (u64 a = 1; a < N; a++) {
    u64 tans = (N - 1) / a;
    ans += tans;
  }

  cout << ans << endl;
  return 0;
}


#include <algorithm>
#include <assert.h>
#include <bitset>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <math.h>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <time.h>
#include <utility>
#include <vector>

using namespace std;

int main() {
  int n;
  cin >> n;
  int cnt = 0;
  for (int i = 1; i <= n - 1; i++) {
    for (int j = 1; j <= n - 1; j++) {
      for (int k = 1; k <= n - 1; k++) {
        if (i * j + k == n) {
          cnt++;
        }
      }
    }
  }
  cout << cnt << endl;
  return 0;
}

#include <algorithm>
#include <assert.h>
#include <bitset>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <math.h>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <time.h>
#include <utility>
#include <vector>

using namespace std;

int main() {
  int n;
  cin >> n;
  int cnt = 0;
  for (int i = 1; i < n; i++) {
    for (int j = 1; j < n; j++) {
      if (i * j < n) {
        cnt++;
      } else {
        break;
      }
    }
  }
  cout << cnt << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main() {
  int64_t n;
  cin >> n;

  int64_t ans = 0;

  for (int64_t c = 1; c < n; c++) {
    int64_t x = n - c;

    for (int64_t a = 1; a * a <= x; a++) {
      if (x % a == 0) {
        ans++;
        if (a != x / a) {
          ans++;
        }
      }
    }
  }

  cout << ans << endl;

  return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
  int64_t n;
  cin >> n;

  int64_t ans = 0;

  for (int64_t a = 1; a < n; a++) {
    ans += (n - 1) / a;
  }

  cout << ans << endl;

  return 0;
}


#include <bits/stdc++.h>
#define ll long long int
using namespace std;

int main() {
  int n;
  cin >> n;
  ll ans = 1;
  for (int i = 2; i < n; i++) {

    ll curr = 1;
    ll val = i;
    for (int j = 2; j <= val; j++) {

      if (val % j == 0) {

        int cnt = 0;
        while (val % j == 0) {
          cnt++;
          val /= j;
        }
        curr *= (cnt + 1);
      }
    }
    ans += curr;
  }
  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
#define ll long long int
using namespace std;

int main() {
  ll n;
  cin >> n;
  ll ans = 0;
  for (ll i = 1; i <= n; ++i)
    for (ll j = 1; i * j < n; ++j)
      ++ans;
  cout << ans << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
using Graph = vector<vector<int>>;
typedef long long ll;
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define EFOR(i, a, b) for (int i = (a); i <= (b); ++i)
#define REP(i, n) FOR(i, 0, n)
#define INF 1e9
const int MOD = 1000000007;
typedef pair<ll, ll> P;

ll divs(ll n) {
  ll cnt = 0;
  for (ll i = 1; i * i <= n; ++i) {
    if (n % i == 0) {
      cnt++;
      if (n / i != i)
        cnt++;
    }
  }
  return cnt;
}

int main(void) {
  ll n, ans = 0;
  cin >> n;
  FOR(c, 1, n) {
    ll tmp = n - c;
    ans += divs(tmp);
  }
  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
using Graph = vector<vector<int>>;
typedef long long ll;
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define EFOR(i, a, b) for (int i = (a); i <= (b); ++i)
#define REP(i, n) FOR(i, 0, n)
#define INF 1e9
const int MOD = 1000000007;
typedef pair<ll, ll> P;

ll divs(ll n) {
  ll cnt = 0;
  for (ll i = 1; i * i <= n; ++i) {
    if (n % i == 0) {
      cnt++;
      if (n / i != i)
        cnt++;
    }
  }
  return cnt;
}

int main(void) {
  ll n, ans = 0;
  cin >> n;
  for (ll a = 1; a < n; ++a) {
    ll b = n / a;
    if (a * b >= n)
      b--;
    ans += b;
  }
  cout << ans << endl;
  return 0;
}


#include <iostream>
#include <math.h>

#define lli long long int
#define ld long double
#define endl "\\n"

using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

#ifndef ONLINE_JUDGE
  // for getting input from input.txt
  freopen(
      "D:\\\\My Folder\\\\Programming\\\\[code] Competetive Programming\\\\input.txt",
      "r", stdin);
  // for writing the output to output.txt
  freopen(
      "D:\\\\My Folder\\\\Programming\\\\[code] Competetive Programming\\\\output.txt",
      "w", stdout);
#endif

  lli N;
  cin >> N;

  lli count = 0;

  // for (lli c = 1; c<N; c++){
  // 	cout<<"c = "<<c<<endl;
  // 	lli k = N-c;
  // 	for (lli a = 1; a<N; a++){
  // 		if(k/a == floor(k/a) && floor(k/a) != 0){
  // 			count += 1;
  // 			cout<<a<<" "<<k/a<<" "<<c<<endl;
  // 			// break;
  // 		}
  // 	}
  // }

  for (lli a = 1; a < N; a++) {
    for (lli b = 1; b < N; b++) {
      if (a * b < N) {
        count += 1;
      }
    }
  }
  cout << count;
}

#include <iostream>
#include <math.h>

#define lli long long int
#define ld long double
#define endl "\\n"

using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

#ifndef ONLINE_JUDGE
  // for getting input from input.txt
  freopen(
      "D:\\\\My Folder\\\\Programming\\\\[code] Competetive Programming\\\\input.txt",
      "r", stdin);
  // for writing the output to output.txt
  freopen(
      "D:\\\\My Folder\\\\Programming\\\\[code] Competetive Programming\\\\output.txt",
      "w", stdout);
#endif

  lli N;
  cin >> N;

  lli count = 0;

  // for (lli c = 1; c<N; c++){
  // 	cout<<"c = "<<c<<endl;
  // 	lli k = N-c;
  // 	for (lli a = 1; a<N; a++){
  // 		if(k/a == floor(k/a) && floor(k/a) != 0){
  // 			count += 1;
  // 			cout<<a<<" "<<k/a<<" "<<c<<endl;
  // 			// break;
  // 		}
  // 	}
  // }

  for (lli a = 1; a < N; a++) {
    for (lli b = 1; b < N; b++) {
      if (a * b < N) {
        count += 1;
      } else
        break;
    }
  }
  cout << count;
}


#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define ll long long int
#define ull unsigned long long int
#define ld long double
#define ascpqi priority_queue<int, vector<int>, greater<int>>
#define ascpql                                                                 \\
  priority_queue<long long int, vector<long long int>, greater<long long int>>
#define ascpqpi                                                                \\
  priority_queue < pair<int, int>,                                             \\
      vector<pair<int, int> greater<pair<int, int>>>
#define descpqi priority_queue<int>
#define descpql priority_queue<long long int>
#define descpqpi priority_queue<pair<int, int>>
#define pii pair<int, int>
#define pll pair<long long int, long long int>
#define puu pair<unsigned long long int, unsigned long long int>
#define pcc pair<char, char>
#define pss pair<string, string>
#define pi acos(-1)
#define vi vector<int>
#define vl vector<long long int>
#define vu vector<unsigned long long int>
#define vd vector<double>
#define vc vector<char>
#define vs vector<string>
#define sortv(x) sort(x.begin(), x.end())
#define vpi vector<pair<int, int>>
#define vpl vector<pair<long long int, long long int>>
#define vpd vector<pair<double, double>>
#define vpc vector<pair<char, char>>
#define vps vector<pair<string, string>>
#define debug1(a) cout << a << endl;
#define debug2(a, b) cout << a << ' ' << b << endl
#define debug3(a, b, c) cout << a << ' ' << b << ' ' << c << endl
#define debugarr(arr, n)                                                       \\
  for (int i = 0; i < n; i++) {                                                \\
    cout << arr[i] << ' ';                                                     \\
  }                                                                            \\
  cout << endl
#define imax pow(2, 31) - 1
#define imin -(pow(2, 31) - 1)
#define llmax pow(2, 63) - 1
#define llmin -(pow(2, 63) - 1)
#define ullmax pow((ull)2, (ull)64) - 1
#define ullmin 0
#define uimin 0
#define uimax pow(2, 32) - 1
#define outround(x) cout << fixed << setprecision(x)
#define multitest                                                              \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)                                                                  \\
    solve();
using namespace std;

ull bigMod(ull b, ull p, ull m) { // (b^p)%m
  b = b % m;
  if (p == 0)
    return 1;
  else if (p % 2 == 0)
    return ((ull)pow(bigMod(b, p / 2, m), 2)) % m;
  else
    return ((ull)pow(bigMod(b, (p - 1) / 2, m), 2) * b) % m;
}

ull nCr(ull n, ull r) {
  ull ans = 1;
  if (r >= n - r) {
    for (ull i = r + 1; i <= n; i++) {
      ans = ans * i;
    }
    for (ull i = 1; i <= n - r; i++) {
      ans = ans / i;
    }
  } else {
    for (ull i = n - r + 1; i <= n; i++) {
      ans = ans * i;
    }
    for (ull i = 1; i <= r; i++) {
      ans = ans / i;
    }
  }
  return ans;
}

ull fib(ull a) {
  const long double root5 = sqrt(5);
  const long double root5plus1div2 = (root5 + 1) / 2;
  return round(pow(root5plus1div2, a) / root5);
}

ull gcd(ull a, ull b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}

ull lcm(ull a, ull b) { return ((a * b) / gcd(a, b)); }

bool isPrime(ull a) {
  if (a % 2 == 0)
    return false;
  for (int i = 3; i <= sqrt(a); i += 2) {
    if (a % i == 0)
      return false;
  }
  return true;
}

bool isComposite(ull a) {
  if (isPrime(a))
    return false;
  else
    return true;
}

bool coPrime(ull a, ull b) {
  if (gcd(a, b) == 1)
    return true;
  else
    return false;
}

ld toRadian(ld deg) { return (deg * pi / 180); }

ull strToInt(string a) {
  int len = a.length();
  int power = 0;
  ull tot = 0;
  for (int i = len - 1; i >= 0; i--) {
    tot = tot + pow(10, power) * (a[i] - '0');
    power++;
  }
  return tot;
}

bool desc(int a, int b) { return a > b; }

ull mex(int *arr, int n) {
  sort(arr, arr + n);
  int now = -1;
  for (int i = 0; i < n; i++) {
    if (arr[i] == now + 1) {
      now++;
    } else if (arr[i] == now) {

    } else {
      return now + 1;
    }
  }
  return now + 1;
}

ll euclid_ext(ll a, ll b, ll *x, ll *y) {
  // cout<<a<<' '<<b<<endl;
  if (a == 0) {
    *x = 0;
    *y = 1;
    return b;
  }
  ll sx, sy;
  ll gcd = euclid_ext(b % a, a, &sx, &sy);
  // cout<<a<<' '<<b<<endl;
  *x = sy - (b / a) * sx;
  *y = sx;
  return gcd;
}

ll modInv(ll b, ll m) {
  ll x, y;
  ll gcd = euclid_ext(b, m, &x, &y);
  if (gcd == -1) {
    return -1;
  } else {
    return (x % m + m) % m;
  }
}

ld slope(ld xdiff, ld ydiff) { return (ydiff / xdiff); }

bool binSearch(ll *arr, ll n, ll target) {
  ull l = 0, r = n - 1;
  while (l < r) {
    int mid = (l + r) / 2;
    if (arr[mid] >= target) {
      r = mid;
    } else {
      l = mid + 1;
    }
  }
  if (arr[l] == target) {
    return true;
  } else {
    return false;
  }
}

int ascii(char x) { return int(x); }

ld sine(ld x) { return sin(toRadian(x)); }

ld cosine(ld x) { return cos(toRadian(x)); }

ld tangent(ld x) { return tan(toRadian(x)); }

ull hammDist(string a, string b, ull len) {
  ull cnt = 0;
  for (int i = 0; i < len; i++) {
    if (a[i] != b[i])
      cnt++;
  }
  return cnt;
}

ull binStrToInt(string a, ull len) {
  ull num = 0;
  for (int i = len - 1; i >= 0; i--) {
    if (a[i] == '1') {
      num = num + pow((ull)2, len - i - 1);
    }
  }
  return num;
}

const ll maxn = 10;

class fenwick {
  ll arr[maxn] = {0};
  ll n;

public:
  void init(ll);
  void update(int, ll); // update(a,b)=update position a by delta of b
  ll sum(int);          // sum(a)=sum of items in the range [1...a]
  int g(int);
  int h(int);
};

int fenwick::g(int a) { return (a & (a + 1)); }

int fenwick::h(int a) { return (a | (a + 1)); }

void fenwick::update(int pos, ll ch) {
  for (; pos < n; pos = h(pos)) {
    arr[pos] += ch;
  }
}

ll fenwick::sum(int pos) {
  ll ans = 0;
  while (pos >= 0) {
    ans += arr[pos];
    pos = g(pos) - 1;
  }
  return ans;
}

void fenwick::init(ll t) { n = t; }

void solve() {
  int n;
  cin >> n;
  int cnt = 0;
  for (int i = 1; i < n; i++) {
    int tar = n - i;
    if (tar == 1 || tar == 2)
      cnt += tar;
    else {
      for (int j = 1; j <= floor(sqrt(tar)); j++) {
        if (tar % j == 0) {
          if (j * j == tar)
            cnt++;
          else
            cnt += 2;
        }
      }
    }
  }
  cout << cnt << endl;
}

int main() {
  cin.tie(NULL);
  cout.tie(NULL);
  ios::sync_with_stdio(false);
  // multitest
  solve();
}

/*

(1,1,3)
(1,2,2)
(2,1,2)
(1,3,1)
(3,1,1)

*/

#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define ll long long int
#define ull unsigned long long int
#define ld long double
#define ascpqi priority_queue<int, vector<int>, greater<int>>
#define ascpql                                                                 \\
  priority_queue<long long int, vector<long long int>, greater<long long int>>
#define ascpqpi                                                                \\
  priority_queue < pair<int, int>,                                             \\
      vector<pair<int, int> greater<pair<int, int>>>
#define descpqi priority_queue<int>
#define descpql priority_queue<long long int>
#define descpqpi priority_queue<pair<int, int>>
#define pii pair<int, int>
#define pll pair<long long int, long long int>
#define puu pair<unsigned long long int, unsigned long long int>
#define pcc pair<char, char>
#define pss pair<string, string>
#define pi acos(-1)
#define vi vector<int>
#define vl vector<long long int>
#define vu vector<unsigned long long int>
#define vd vector<double>
#define vc vector<char>
#define vs vector<string>
#define sortv(x) sort(x.begin(), x.end())
#define vpi vector<pair<int, int>>
#define vpl vector<pair<long long int, long long int>>
#define vpd vector<pair<double, double>>
#define vpc vector<pair<char, char>>
#define vps vector<pair<string, string>>
#define debug1(a) cout << a << endl;
#define debug2(a, b) cout << a << ' ' << b << endl
#define debug3(a, b, c) cout << a << ' ' << b << ' ' << c << endl
#define debugarr(arr, n)                                                       \\
  for (int i = 0; i < n; i++) {                                                \\
    cout << arr[i] << ' ';                                                     \\
  }                                                                            \\
  cout << endl
#define imax pow(2, 31) - 1
#define imin -(pow(2, 31) - 1)
#define llmax pow(2, 63) - 1
#define llmin -(pow(2, 63) - 1)
#define ullmax pow((ull)2, (ull)64) - 1
#define ullmin 0
#define uimin 0
#define uimax pow(2, 32) - 1
#define outround(x) cout << fixed << setprecision(x)
#define multitest                                                              \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)                                                                  \\
    solve();
using namespace std;

ull bigMod(ull b, ull p, ull m) { // (b^p)%m
  b = b % m;
  if (p == 0)
    return 1;
  else if (p % 2 == 0)
    return ((ull)pow(bigMod(b, p / 2, m), 2)) % m;
  else
    return ((ull)pow(bigMod(b, (p - 1) / 2, m), 2) * b) % m;
}

ull nCr(ull n, ull r) {
  ull ans = 1;
  if (r >= n - r) {
    for (ull i = r + 1; i <= n; i++) {
      ans = ans * i;
    }
    for (ull i = 1; i <= n - r; i++) {
      ans = ans / i;
    }
  } else {
    for (ull i = n - r + 1; i <= n; i++) {
      ans = ans * i;
    }
    for (ull i = 1; i <= r; i++) {
      ans = ans / i;
    }
  }
  return ans;
}

ull fib(ull a) {
  const long double root5 = sqrt(5);
  const long double root5plus1div2 = (root5 + 1) / 2;
  return round(pow(root5plus1div2, a) / root5);
}

ull gcd(ull a, ull b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}

ull lcm(ull a, ull b) { return ((a * b) / gcd(a, b)); }

bool isPrime(ull a) {
  if (a % 2 == 0)
    return false;
  for (int i = 3; i <= sqrt(a); i += 2) {
    if (a % i == 0)
      return false;
  }
  return true;
}

bool isComposite(ull a) {
  if (isPrime(a))
    return false;
  else
    return true;
}

bool coPrime(ull a, ull b) {
  if (gcd(a, b) == 1)
    return true;
  else
    return false;
}

ld toRadian(ld deg) { return (deg * pi / 180); }

ull strToInt(string a) {
  int len = a.length();
  int power = 0;
  ull tot = 0;
  for (int i = len - 1; i >= 0; i--) {
    tot = tot + pow(10, power) * (a[i] - '0');
    power++;
  }
  return tot;
}

bool desc(int a, int b) { return a > b; }

ull mex(int *arr, int n) {
  sort(arr, arr + n);
  int now = -1;
  for (int i = 0; i < n; i++) {
    if (arr[i] == now + 1) {
      now++;
    } else if (arr[i] == now) {

    } else {
      return now + 1;
    }
  }
  return now + 1;
}

ll euclid_ext(ll a, ll b, ll *x, ll *y) {
  // cout<<a<<' '<<b<<endl;
  if (a == 0) {
    *x = 0;
    *y = 1;
    return b;
  }
  ll sx, sy;
  ll gcd = euclid_ext(b % a, a, &sx, &sy);
  // cout<<a<<' '<<b<<endl;
  *x = sy - (b / a) * sx;
  *y = sx;
  return gcd;
}

ll modInv(ll b, ll m) {
  ll x, y;
  ll gcd = euclid_ext(b, m, &x, &y);
  if (gcd == -1) {
    return -1;
  } else {
    return (x % m + m) % m;
  }
}

ld slope(ld xdiff, ld ydiff) { return (ydiff / xdiff); }

bool binSearch(ll *arr, ll n, ll target) {
  ull l = 0, r = n - 1;
  while (l < r) {
    int mid = (l + r) / 2;
    if (arr[mid] >= target) {
      r = mid;
    } else {
      l = mid + 1;
    }
  }
  if (arr[l] == target) {
    return true;
  } else {
    return false;
  }
}

int ascii(char x) { return int(x); }

ld sine(ld x) { return sin(toRadian(x)); }

ld cosine(ld x) { return cos(toRadian(x)); }

ld tangent(ld x) { return tan(toRadian(x)); }

ull hammDist(string a, string b, ull len) {
  ull cnt = 0;
  for (int i = 0; i < len; i++) {
    if (a[i] != b[i])
      cnt++;
  }
  return cnt;
}

ull binStrToInt(string a, ull len) {
  ull num = 0;
  for (int i = len - 1; i >= 0; i--) {
    if (a[i] == '1') {
      num = num + pow((ull)2, len - i - 1);
    }
  }
  return num;
}

const ll maxn = 10;

class fenwick {
  ll arr[maxn] = {0};
  ll n;

public:
  void init(ll);
  void update(int, ll); // update(a,b)=update position a by delta of b
  ll sum(int);          // sum(a)=sum of items in the range [1...a]
  int g(int);
  int h(int);
};

int fenwick::g(int a) { return (a & (a + 1)); }

int fenwick::h(int a) { return (a | (a + 1)); }

void fenwick::update(int pos, ll ch) {
  for (; pos < n; pos = h(pos)) {
    arr[pos] += ch;
  }
}

ll fenwick::sum(int pos) {
  ll ans = 0;
  while (pos >= 0) {
    ans += arr[pos];
    pos = g(pos) - 1;
  }
  return ans;
}

void fenwick::init(ll t) { n = t; }

void solve() {
  int n;
  cin >> n;
  int cnt = 0;
  for (int i = 1; i < n; i++) {
    for (int j = 1; i * j < n; j++) {
      cnt++;
    }
  }
  cout << cnt << endl;
}

int main() {
  cin.tie(NULL);
  cout.tie(NULL);
  ios::sync_with_stdio(false);
  // multitest
  solve();
}

/*

(1,1,3)
(1,2,2)
(2,1,2)
(1,3,1)
(3,1,1)

*/


#include <bits/stdc++.h>
using namespace std;
// Optimisations
#pragma GCC target("avx2")
#pragma GCC optimization("unroll-loops")
#pragma GCC optimize("O2")
// shortcuts for functions
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define prec(n) fixed << setprecision(n)
#define n_l '\\n'
// make it python
#define gcd __gcd
#define append push_back
#define str to_string
// utility functions shortcuts
#define max3(a, b, c) max(a, max(b, c))
#define min3(a, b, c) min(a, min(b, c))
#define sswap(a, b)                                                            \\
  {                                                                            \\
    a = a ^ b;                                                                 \\
    b = a ^ b;                                                                 \\
    a = a ^ b;                                                                 \\
  }
#define swap(a, b)                                                             \\
  {                                                                            \\
    auto temp = a;                                                             \\
    a = b;                                                                     \\
    b = temp;                                                                  \\
  }
#define init(dp) memset(dp, -1, sizeof(dp));
#define set0(dp) memset(dp, 0, sizeof(dp));
#define bits(x) __builtin_popcount(x)
#define SORT(v) sort(all(v))
#define endl "\\n"
#define forr(i, n) for (ll i = 0; i < n; i++)
// declaration shortcuts
typedef long long int ll;
#define int ll
// Constants
constexpr int dx[] = {-1, 0, 1, 0, 1, 1, -1, -1};
constexpr int dy[] = {0, -1, 0, 1, 1, -1, 1, -1};
constexpr ll INF = 1999999999999999997;
constexpr int inf = INT_MAX;
constexpr int MAXSIZE = int(1e6) + 5;
constexpr auto PI = 3.14159265358979323846L;
constexpr auto oo = numeric_limits<int>::max() / 2 - 2;
constexpr auto eps = 1e-6;
constexpr auto mod = 1000000007;
constexpr auto MOD = 1000000007;
constexpr auto MOD9 = 1000000009;
constexpr auto maxn = 100006;
// void IOfile(){
// freopen(file_name, reade_mode, stdin);
// freopen(file_name, write_mode, stdout);
// }
void fastio() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
}
int32_t main() {
  fastio();
  int n;
  cin >> n;
  int ans = 0;
  for (int i = 1; i <= n - 1; i++) {
    int cnt = 0;
    for (int j = 1; j * j <= i; j++) {
      if (i % j == 0) {
        cnt++;
        if (j != i / j)
          cnt++;
      }
    }
    ans += cnt;
  }
  cout << ans;
}

#include <bits/stdc++.h>
using namespace std;
// Optimisations
#pragma GCC target("avx2")
#pragma GCC optimization("unroll-loops")
#pragma GCC optimize("O2")
// shortcuts for functions
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define prec(n) fixed << setprecision(n)
#define n_l '\\n'
// make it python
#define gcd __gcd
#define append push_back
#define str to_string
// utility functions shortcuts
#define max3(a, b, c) max(a, max(b, c))
#define min3(a, b, c) min(a, min(b, c))
#define sswap(a, b)                                                            \\
  {                                                                            \\
    a = a ^ b;                                                                 \\
    b = a ^ b;                                                                 \\
    a = a ^ b;                                                                 \\
  }
#define swap(a, b)                                                             \\
  {                                                                            \\
    auto temp = a;                                                             \\
    a = b;                                                                     \\
    b = temp;                                                                  \\
  }
#define init(dp) memset(dp, -1, sizeof(dp));
#define set0(dp) memset(dp, 0, sizeof(dp));
#define bits(x) __builtin_popcount(x)
#define SORT(v) sort(all(v))
#define endl "\\n"
#define forr(i, n) for (ll i = 0; i < n; i++)
// declaration shortcuts
typedef long long int ll;
#define int ll
// Constants
constexpr int dx[] = {-1, 0, 1, 0, 1, 1, -1, -1};
constexpr int dy[] = {0, -1, 0, 1, 1, -1, 1, -1};
constexpr ll INF = 1999999999999999997;
constexpr int inf = INT_MAX;
constexpr int MAXSIZE = int(1e6) + 5;
constexpr auto PI = 3.14159265358979323846L;
constexpr auto oo = numeric_limits<int>::max() / 2 - 2;
constexpr auto eps = 1e-6;
constexpr auto mod = 1000000007;
constexpr auto MOD = 1000000007;
constexpr auto MOD9 = 1000000009;
constexpr auto maxn = 100006;
// void IOfile(){
// freopen(file_name, reade_mode, stdin);
// freopen(file_name, write_mode, stdout);
// }
void fastio() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
}

int cnt[MAXSIZE];

int32_t main() {
  fastio();
  int n;
  cin >> n;
  cnt[1] = 1;
  for (int i = 1; i < MAXSIZE; i++) {
    cnt[i] = 1;
  }
  for (int i = 2; i < MAXSIZE; i++) {
    if (cnt[i] == 1) {
      for (int j = i; j < MAXSIZE; j += i) {
        int k = 0;
        int p = j;
        while (p % i == 0) {
          p /= i;
          k++;
        }
        cnt[j] *= (k + 1);
      }
    }
  }
  int ans = 0;
  for (int i = 1; i < n; i++)
    ans += cnt[i];
  cout << ans;
}


#include <algorithm>
#include <bits/stdc++.h>
#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <stack>
#include <string>
#include <utility>
#include <vector>

#define square(x) x *x;
#define ll long long;

using namespace std;

long long int arr[1000001];

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif

  long long int n;
  cin >> n;

  long long int ans = 0;
  for (long long int i = 1; i < n; i++) {
    ans += 2;
    if (i % 2 == 0) {
      for (long long int j = 2; j <= i / 2; j += 1) {
        if (i % j == 0)
          ans += 1;
      }
    } else {
      for (long long int j = 3; j <= i / 2; j += 2) {
        if (i % j == 0)
          ans += 1;
      }
    }
  }
  cout << ans - 1 << endl;

  return 0;
}

#include <algorithm>
#include <bits/stdc++.h>
#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <stack>
#include <string>
#include <utility>
#include <vector>

#define square(x) x *x;
#define ll long long;

using namespace std;

long long int arr[1000001];

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif

  long long int n;
  cin >> n;

  long long int ans = 0;
  for (long long int i = 1; i < n; i++) {
    for (long long int j = 1; j * i < n; j++) {
      ans++;
    }
  }
  cout << ans << endl;

  return 0;
}


#include <algorithm>
#include <climits>
#include <cmath>
#include <cstring>
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
using namespace std;

typedef long long int ll;

int main() {
  int n;
  cin >> n;

  ll ans = 0;
  for (ll i = 1; i <= n - 1; i++) {
    int sq = sqrt(i);
    for (ll j = 1; j <= sq; j++) {
      if (i % j == 0) {
        if (j * j == i) {
          ans++;
        } else {
          ans += 2;
        }
      }
    }
  }

  cout << ans << endl;
}

#include <algorithm>
#include <climits>
#include <cmath>
#include <cstring>
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
using namespace std;

typedef long long int ll;

int main() {
  ll n;
  cin >> n;

  ll ans = 0;
  for (ll i = 1; i <= n - 1; i++) {
    ans += (n - 1) / i;
  }

  cout << ans << endl;
}


// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx,avx2,fma")
// #pragma GCC optimization ("unroll-loops")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace std;
typedef long long int ll;
using namespace __gnu_pbds;
typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag,
             tree_order_statistics_node_update>
    ordered_set;
#define MOD 1000000007
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
//*s.find_by_order(p)   returns the value of pth largest starting from 0
// s.order_of_key(p)   returns no. of items that are strictly < p
// string bin = bitset<64>(m).to_string();     convert decimal m to binary
ll countWays(ll n) {
  ll count = 0;
  for (ll i = 1; i * i < n; i++)
    if (n % i == 0)
      count++;

  return count;
}
int main() {
  fast;
  ll t1;
  t1 = 1;
  while (t1--) {
    ll n, i, a, b, ans;
    cin >> n;
    ans = 0;
    for (i = 1; i <= n; i++) {
      a = n - i;
      if (a < 1) {
        continue;
      }
      b = sqrt(a);
      if (b * b == a) {
        ans++;
      }
      ans += 2 * countWays(a);
    }
    cout << ans << "\\n";
  }
}

// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx,avx2,fma")
// #pragma GCC optimization ("unroll-loops")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace std;
typedef long long int ll;
using namespace __gnu_pbds;
typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag,
             tree_order_statistics_node_update>
    ordered_set;
#define MOD 1000000007
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
//*s.find_by_order(p)   returns the value of pth largest starting from 0
// s.order_of_key(p)   returns no. of items that are strictly < p
// string bin = bitset<64>(m).to_string();     convert decimal m to binary
#define MAXN 1000005
int spf[MAXN];
void sieve() {
  spf[1] = 1;
  for (int i = 2; i < MAXN; i++)
    spf[i] = i;
  for (int i = 4; i < MAXN; i += 2)
    spf[i] = 2;
  for (int i = 3; i * i < MAXN; i++) {
    if (spf[i] == i) {
      for (int j = i * i; j < MAXN; j += i)
        if (spf[j] == j)
          spf[j] = i;
    }
  }
}
vector<int> getFactorization(int x) {
  vector<int> ret;
  while (x != 1) {
    ret.push_back(spf[x]);
    x = x / spf[x];
  }
  return ret;
}
int main() {
  fast;
  ll t1;
  t1 = 1;
  while (t1--) {
    sieve();
    int n, i, a, j, b, ans;
    cin >> n;
    ans = 0;
    for (i = 1; i <= n; i++) {
      a = n - i;
      if (a < 1) {
        continue;
      }
      b = sqrt(a);
      if (a == 1) {
        ans++;
        continue;
      }
      // cout<<a<<" ";
      vector<int> v = getFactorization(a);
      sort(v.begin(), v.end());
      int p = 1;
      int s = 1;
      if (v.size() == 0) {
        continue;
      }
      for (j = 1; j < v.size(); j++) {
        if (v[j] == v[j - 1]) {
          p++;
        } else {
          s *= (p + 1);
          p = 1;
        }
      }
      s *= (p + 1);
      ans += s;
    }
    cout << ans << "\\n";
  }
}


#include <cmath>
#include <iostream>
using namespace std;
typedef long long int ll;
int main() {
  ll n;
  cin >> n;
  ll p = sqrt(n);
  ll cnt = 0;
  for (ll i = 1; i <= n; i++) {
    for (ll j = 1; j <= n; j++) {
      if (n - (i * j) > 0)
        cnt++;
    }
  }
  cout << cnt << "\\n";
}

#include <cmath>
#include <iostream>
using namespace std;
typedef long long int ll;
int main() {
  ll n;
  cin >> n;
  ll p = ceil(sqrt(n - 1));
  ll cnt = 0;
  for (ll i = 1; i <= n; i++) {
    for (ll j = 1; j <= n; j++) {
      if (n - (i * j) > 0) {

        cnt++;
        // cout<<i<<" "<<j<<" "<<(n-(i*j))<<"\\n";
      }
      if (i * j >= n)
        break;
    }
  }
  cout << cnt << "\\n";
}


#include <bits/stdc++.h>
using namespace std;

#define FOR(i, a, b)                                                           \\
  for (unsigned long long i = a; i <= (unsigned long long)(b); i++)

int main() {
  unsigned long long N;
  cin >> N;
  unsigned long long ans = 0;
  FOR(i, 1, N - 1) {
    FOR(j, 1, i) {
      if (i % j == 0) {
        ans++;
      }
    }
  }
  cout << ans;
}

#include <bits/stdc++.h>
using namespace std;

#define FOR(i, a, b)                                                           \\
  for (unsigned long long i = a; i <= (unsigned long long)(b); i++)

int main() {
  unsigned long long N, m = 0;
  cin >> N;
  unsigned long long ans = 0;

  FOR(i, 1, N - 1) {
    m = (N - 1) / i + 1;
    while (i * m > N - 1) {
      m--;
    }
    ans += m;
  }
  cout << (ans - m + 1);
}


// BELIEVE IN YOURSELF
// next_permutation

#include <bits/stdc++.h>
#define ll long long int
#define ld long double
#define pb push_back
#define pob pop_back
#define vi vector<ll>
#define mp make_pair
#define sz size()
#define rep1(i, n) for (ll i = 1; i <= n; i++)
#define rep(i, n) for (ll i = 0; i < n; i++)
#define fast                                                                   \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define maxx 100005
#define se second
#define fi first
#define be begin()
#define en end()
#define sortv(v) sort(v.begin(), v.end());
#define sortr(v) sort(v.rbegin(), v.rend());
#define w()                                                                    \\
  ll _;                                                                        \\
  cin >> _;                                                                    \\
  while (_--)
#define edge pair<ll, ll>
#define pq priority_queue<ll>
#define mod 1000000007
#define Endl "\\n"
#define cy cout << "YES" << endl;
#define cn cout << "NO" << endl;
#define lb(v, x) std::lower_bound(v.begin(), v.end(), x)
#define ub(v, x) std::upper_bound(v.begin(), v.end(), x)

using namespace std;

ll fact(ll n) {
  ll i;
  ll ans = 0;

  for (i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      if (n / i == i) {
        ans++;
      } else {
        ans += 2;
      }
    }
  }
  return ans;
}

int main() {
  fast;

  ll n;
  cin >> n;

  ll c = 0;
  ll ans = 0;

  for (c = n - 1; c >= 1; c--) {
    ans += fact(n - c);
  }

  cout << ans << Endl;

  return 0;
}

// BELIEVE IN YOURSELF
// next_permutation

#include <bits/stdc++.h>
#define ll long long int
#define ld long double
#define pb push_back
#define pob pop_back
#define vi vector<ll>
#define mp make_pair
#define sz size()
#define rep1(i, n) for (ll i = 1; i <= n; i++)
#define rep(i, n) for (ll i = 0; i < n; i++)
#define fast                                                                   \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define maxx 100005
#define se second
#define fi first
#define be begin()
#define en end()
#define sortv(v) sort(v.begin(), v.end());
#define sortr(v) sort(v.rbegin(), v.rend());
#define w()                                                                    \\
  ll _;                                                                        \\
  cin >> _;                                                                    \\
  while (_--)
#define edge pair<ll, ll>
#define pq priority_queue<ll>
#define mod 1000000007
#define Endl "\\n"
#define cy cout << "YES" << endl;
#define cn cout << "NO" << endl;
#define lb(v, x) std::lower_bound(v.begin(), v.end(), x)
#define ub(v, x) std::upper_bound(v.begin(), v.end(), x)

using namespace std;

ll v[1000002];
ll prime[1000002];

void fact() {
  ll n = 1000001;
  ll i;
  v[0] = 0;
  v[1] = 0;
  ll j;
  prime[1] = 1;
  for (i = 1; i * i <= n; i++) {
    if (prime[i] == 0) {
      v[i] += 2;
    }

    for (j = i * i; j <= n; j += i) {
      prime[j] = 1;
      if (i * i == j) {
        v[j] += 1;
      } else {
        v[j] += 2;
      }
    }
  }
}

int main() {
  fast;

  ll n;
  cin >> n;
  fact();
  ll c = 0;
  ll ans = 0;
  // cout<<v[12]<<endl;

  for (c = n - 1; c >= 1; c--) {
    ans += (v[n - c]);
  }

  cout << ans << Endl;

  return 0;
}