#include using namespace std; typedef long long ll; typedef long double ld; #define rep(i, a, n) for (int i = (a); i < (n); i++) #define per(i, a, n) for (int i = (n) - 1; i >= (a); i--) #define FOR(i, n) rep(i, a, (n)) #define fi first #define se second ll MOD=1e9+7; ll a[200004]; ll b[600000]; ll maxi[600000]; ll g[200005]; int kam[2000005]; ll zmen(ll L, ll R, ll l, ll r, ll co, ll kdejsem){ b[kdejsem]=0; if(maxi[kdejsem]!=0){ if(L==R-1) {b[kdejsem]=maxi[kdejsem]; maxi[kdejsem]=0;} else {maxi[2*kdejsem]=maxi[kdejsem]; maxi[2*kdejsem+1]=maxi[kdejsem]; b[kdejsem]=(R-L)*maxi[kdejsem]; maxi[kdejsem]=0;} } if(L==l&&R==r) {maxi[kdejsem]=co; b[kdejsem]=(R-L)*maxi[kdejsem]; return (R-L)*maxi[kdejsem];} if(l<(L+R)/2) { zmen(L, (L+R)/2, l, min(r,(L+R)/2), co, 2*kdejsem); } if(r>(L+R)/2) zmen((L+R)/2,R,max(l,(L+R)/2),r,co,2*kdejsem+1); b[kdejsem]=b[2*kdejsem]+b[2*kdejsem+1]; return b[kdejsem]; } ll soucet(ll L, ll R, ll l, ll r, ll kdejsem){ if(maxi[kdejsem]!=0){ if(L==R-1) {b[kdejsem]=maxi[kdejsem]; maxi[kdejsem]=0;} else {maxi[2*kdejsem]=maxi[kdejsem]; maxi[2*kdejsem+1]=maxi[kdejsem]; b[kdejsem]=(R-L)*maxi[kdejsem]; maxi[kdejsem]=0;} } if(l==L&&r==R) return b[kdejsem]; ll x=0; if(l<(L+R)/2) { x+=soucet(L, (L+R)/2, l, min(r,(L+R)/2), 2*kdejsem); } if(r>(L+R)/2) x+=soucet((L+R)/2,R,max(l,(L+R)/2),r, 2*kdejsem+1); return x; } int main(void) { ll res=0; int N; scanf("%i", &N); int i; int M=1; while(M > st; st.push_back({N,MOD}); int l=0; for(i=N-1;i>=0;i--){ kam[i]=i+1; g[i]=a[i]; int k=i; while(k!=N){ //printf("%i\n",i); int j=kam[k]; if(j==N) break; g[j]=__gcd(g[j], a[i]); if(g[j]==g[k]) kam[k]=kam[j]; else k=j; } while(st[l].se