28237
 13190
 39914
 81367
 8554
 61106
 67448
 39004
 22308
 16054
 71468
 60501
 100
 300
 59632
 90783
 5611
 1000
 69475
 69753
 10
 5
 582
 8
 36961
 5071
 20
 53213
 92775
 28738
 100000
 92280
 37944
 9
 2627
 7
 3

1028306548 224346172 2054738392 8539207488 94344524 4816051228 5867563092 1962150044 641839188 332342852 6587875268 4721174212 12600 115440 4586497300 10630118936 40580456 1286328 6225539588 6275533596 92 8 434692 52 1762017168 33141852 440 3652070664 11101694484 1065137992 12898363344 10983871880 1856988304 64 8885348 28 0
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
#define ms(s, n) memset(s, n, sizeof(s))
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FORd(i, a, b) for (int i = (a); i >= (b); --i)
#define sz(a) int((a).size())
#define pconent(t, x) (t.find(x) != t.end())
#define all(a) (a).begin(), (a).end()
#define uni(a) (a).erase(unique(all(a)), (a).end())
#define pb push_back
#define pf push_front
#define mp make_pair
#define fi first
#define se second
#define prec(n) fixed<<setprecision(n)
#define bit(n, i) (((n) >> (i)) & 1)
#define bitcount(n) __builtin_popcountll(n)
typedef long long ll;
typedef long double ld;
typedef tree<pair<ll,ll>,null_type,less<pair<ll,ll> >,rb_tree_tag,tree_order_statistics_node_update> ost;
const ll MOD =  1e9+7;
const ll LINF = (ll) 1e18;
const ld PI = acos((ld) -1);
const ld EPS = 1e-9;
inline ll gcd(ll a, ll b) {ll r; while (b) {r = a % b; a = b; b = r;} return a;}
inline ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
inline ll fpow(ll n, ll k, int p = MOD) {ll r = 1; for (; k; k >>= 1) {if (k & 1) r = r * n % p; n = n * n % p;} return r;}
inline ll isqrt(ll k) {ll r = sqrt(k) + 1; while (r * r > k) r--; return r;}
inline ll icbrt(ll k) {ll r = cbrt(k) + 1; while (r * r * r > k) r--; return r;}
inline ll inv(ll a, ll p = MOD) {return fpow(a, p - 2, p);}
inline int sign(ld x) {return x < -EPS ? -1 : x > +EPS;}
inline int sign(ld x, ld y) {return sign(x - y);}
#define db(v) (cout<<#v<<" = "<<v<<endl)
#define endln (cout<<endl)
template <class T> inline void dbv(T a) {  for(auto x : a){ cout<<x<<", " ;} cout<<endl;}
using namespace std;
vector<vector<ll> > g;
vector<vector<ll> > wt;
vector<ll> vis;
set<pair<ll,ll> > sx; 
ll dfs(ll v)
{
	vis[v] = 1;
	ll ret = 0;
	FOR(i,0,g[v].size())
	{
		ll c = g[v][i];
		pair<ll,ll> px = mp(v,c);
		if(sx.find(px)==sx.end())
		{
			ret += wt[v][i];
			sx.insert(px);
		}
		if(vis[c]==0)
		{
			vis[c] = 1;
			ret += dfs(c);
		}
	}
	return ret;
}
void output(ll tx)
{
	ll n;
	cin>>n;
	n++;
	ll cnt = 0;
	g.resize(2*n+2);
	wt.resize(2*n+2);
	vis.resize(2*n+2);
	FOR(i,2,n+1)
	{
		for(ll j = 2*i ; j<=n ; j+=i)
		{
			g[2*i].pb(2*j);
			g[2*i].pb(2*j+1);
			g[2*i+1].pb(2*j);
			g[2*i+1].pb(2*j+1);

			g[2*j].pb(2*i);
			g[2*j].pb(2*i+1);
			g[2*j+1].pb(2*i);
			g[2*j+1].pb(2*i+1);

			wt[2*i].pb(j/i);
			wt[2*i].pb(j/i);
			wt[2*i+1].pb(j/i);
			wt[2*i+1].pb(j/i);
			wt[2*j].pb(j/i);
			wt[2*j].pb(j/i);
			wt[2*j+1].pb(j/i);
			wt[2*j+1].pb(j/i);
		}
	}
	ll ans = 0;
	FOR(i,0,2*n)
	{
		if(vis[i]==0)
		{
			ans = max(ans,dfs(i));
		}
	}
	cout<<ans/2<<endl;
}
int main()
{
    ll t = 1;
    // cin>>t;
    FOR(i,0,t)
    {
    	// cout<<"Case #"<<(i+1)<<": ";
        output(i+1);
    }
    return 0;
}