#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int tree[N<<2],maxi[N<<2];
int ls(int p)
{
return p<<1;
}
int rs(int p)
{
return p<<1|1;
}
void pushup(int cur)
{
tree[cur]=tree[ls(cur)]+tree[rs(cur)];
maxi[cur]=max(maxi[ls(cur)],maxi[rs(cur)]);
}
void build(int cur,int qx,int qy)
{
if(qx==qy)
{
cin>>tree[cur];
maxi[cur]=tree[cur];
return ;
}
int mid=qx+qy>>1;
build(ls(cur),qx,mid);
build(rs(cur),mid+1,qy);
pushup(cur);
}
void update(int cur, int lt, int rt, int qx, int qy)
{
if(qy<lt||rt<qx)
return ;
if(qx==qy)
{
tree[cur]=sqrt(tree[cur]);
maxi[cur]=sqrt(maxi[cur]);
return ;
}
int mid=qx+qy>>1;
if(lt<=mid&&maxi[ls(cur)]>1)
{
update(ls(cur),qx,mid,lt,rt);
}
if(rt>mid&&maxi[rs(cur)]>1)
{
update(rs(cur),mid+1,qy,lt,rt);
}
pushup(cur);
}
int query(int cur,int qx,int qy,int lt,int rt)
{
if(qy<lt||rt<qx)
{
return 0;
}
if(lt<=qx&&qy<=rt)
{
return tree[cur];
}
int mid=qx+qy>>1;
return query(ls(cur),qx,mid,lt,rt)+query(rs(cur),mid+1,qy,lt,rt);
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin>>n;
build(1,1,n);
int q;
cin>>q;
while(q--)
{
int k,l,r;
cin>>k>>l>>r;
if(l>r)
swap(l,r);
if(k==0)
{
update(1,1,n,l,r);
}
else
cout<<query(1,1,n,l,r)<<"\n";
}
}