RT,死活拍不出来
#include<bits/stdc++.h>
#define int long long
#define inf 0x3f3f3f3f3f3f3f3fll
#define double long double
#define eps 1e-10
#define endl '\n'
using namespace std;
const int N=1e5+5,mod=998244353;
int n,lsh[N],p[N],a[N],b[N],cnt[N],ans,val[N],tot[N],mx[N];
struct BIT{
int c[N];
inline int lowbit(int x){ return x&-x; }
inline void add(int x,int y){ for(;x<=n;x+=lowbit(x)) c[x]+=y; }
inline int ask(int x){
int s=0;
for(;x;x-=lowbit(x)) s+=c[x];
return s;
}
}T;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
p[0]=1;
for(int i=1;i<=n;++i) p[i]=p[i-1]*2%mod;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1;i<=n;++i){
for(int j=i;j<=n;j+=i){
if(a[j]>mx[i]) tot[i]=0,mx[i]=a[j];
if(a[j]==mx[i]) ++tot[i];
}
lsh[i]=mx[i];
}
for(int i=1;i<=n;++i) for(int j=1;j<=sqrt(i);++j) if(i%j==0){
if(mx[j]==a[i]&&tot[j]==1&&j!=i) ++val[i];
if(i/j!=j&&i/j!=i&&mx[i/j]==a[i]&&tot[i/j]==1) ++val[i];
}
sort(lsh+1,lsh+n+1);
for(int i=1;i<=n;++i) b[i]=lower_bound(lsh+1,lsh+n+1,mx[i])-lsh,T.add(b[i],1);
for(int i=1;i<=n;++i){
if(mx[i]==a[i]) ans=(ans+p[cnt[b[i]]+T.ask(b[i]-1)]*a[i]%mod)%mod;
ans=(ans+(p[val[i]]+mod-1)%mod*p[T.ask(b[i]-1)]%mod*a[i]%mod)%mod;
++cnt[b[i]];
}
cout<<ans<<endl;
return 0;
}