#include using namespace std; typedef long long int lli; typedef pair pii; typedef vector vec; #define pb push_back #define mp make_pair #define mt make_tuple #define scn(n) scanf("%d",&n) #define scnll(n) scanf("%lld",&n) #define scn2(n,m) scanf("%d%d",&n,&m) #define scn3(n,m,w) scanf("%d%d%d",&n,&m,&w) #define scn2ll(n,m) scanf("%lld%lld",&n,&m) #define atoz(v) v.begin(),v.end() #define Fill(a,v) memset(a,v,sizeof(a)) #define sz(v) v.size() #define fi first #define se second #define inf 1e9 #define pi acos(-1.0) #define sqr(x) x*x #define max3(a,b,c) max(a,max(b,c)) #define min3(a,b,c) min(a,min(b,c)) int Set(int N,int pos) { return N=N | (1<1) cnt++; cnt++; } } } else{ while(x%2==0){cnt++;x/=2;} } return cnt; } lli gotit(lli x, int odd) { vectordivs; lli mx=-1; for(lli i=1; i*i<=x; i++) { if(x%i==0) { if(x/i != i && i>1)divs.pb(x/i); divs.pb(i); } } lli next; for(int i=0; imx || (cnt==mx && divs[i]%2==0)) { mx = cnt; next = divs[i]; } } prv = max(prv,1LL); ans += prv; prv = (x/next)*prv; // cout<1)++x; ans += x*max(prv,1LL); break; } x = gotit(x,x%2); } } printf("%lld",ans); return 0; }