#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pi (4*atan(1.0))
const int N=5e5+10,M=4e6+10,inf=1e9+10;
ll sum[N<<2];
ll maxx[N<<2];
ll getnum(ll x)
{
return (ll)sqrt(x);
}
void pushup(int pos)
{
sum[pos]=sum[pos<<1]+sum[pos<<1|1];
maxx[pos]=max(maxx[pos<<1],maxx[pos<<1|1]);
}
void build(int l,int r,int pos)
{
if(l==r)
{
scanf("%lld",&sum[pos]);
maxx[pos]=sum[pos];
return;
}
int mid=(l+r)>>1;
build(l,mid,pos<<1);
build(mid+1,r,pos<<1|1);
pushup(pos);
}
void update(int L,int R,int l,int r,int pos)
{
if(l==r)
{
sum[pos]=getnum(sum[pos]);
maxx[pos]=sum[pos];
return;
}
int mid=(l+r)>>1;
if(L<=mid&&maxx[pos<<1]>1)
update(L,R,l,mid,pos<<1);
if(R>mid&&maxx[pos<<1|1]>1)
update(L,R,mid+1,r,pos<<1|1);
pushup(pos);
}
ll query(int L,int R,int l,int r,int pos)
{
if(L<=l&&r<=R)
return sum[pos];
int mid=(l+r)>>1;
ll ans=0;
if(L<=mid)
ans+=query(L,R,l,mid,pos<<1);
if(R>mid)
ans+=query(L,R,mid+1,r,pos<<1|1);
return ans;
}
int main()
{
int n,m,i;
scanf("%d",&n);
build(1,n,1);
scanf("%d",&m);
while(m--)
{
int k,l,r;
scanf("%d%d%d",&k,&l,&r);
if(l>r)swap(l,r);
if(k==0)
update(l,r,1,n,1);
else
printf("%lld\n",query(l,r,1,n,1));
}
return 0;
}