#include <bits/stdc++.h>
#define int long long
using namespace std;
int head[5005],sum[5005],nxt[5005],to[5005],n;
bool vis[5005];
int idx,ans;
inline void addedge(int a,int b)
{
to[idx]=b;
nxt[idx]=head[a];
head[a]=idx++;
}
inline void init()
{
for(int i=1;i<=n;i++)
{
for(int j=2;j<=n/i;j++)
{
sum[i*j]+=i;
}
}
}
inline int dfs(int id)
{
int d1=0,d2=0;
for(int i=head[id];i!=-1;i=nxt[i])
{
int d=dfs(to[i])+1;
if(d>=d1)d2=d1,d1=d;
else if(d>d2)d2=d;
}
ans=max(ans,d1+d2);
return d1;
}
signed main()
{
cin>>n;
init();
memset(head,-1,sizeof head);
for(int i=2;i<=n;i++)
{
if(sum[i]<i)
{
addedge(sum[i],i);
vis[i]=true;
}
}
for(int i=1;i<=n;i++)
{
if(!vis[i])dfs(i);
}
cout<<ans<<endl;
return 0;
}