#include<bits/stdc++.h>
using namespace std;
#define int long long
long long a[100005],tr[(1<<18)+5],m[(1<<18)+5];
void inline init_line_tree(int u,int lt,int rt)
{
if(lt>=rt)
{
tr[u]=m[u]=a[lt];
return ;
}
long long mid=(lt+rt)>>1;
init_line_tree(u<<1,lt,mid);
init_line_tree(u<<1|1,mid+1,rt);
tr[u]=tr[u<<1]+tr[u<<1|1];
m[u]=max(m[u<<1],m[u<<1|1]);
}
void inline update_line_tree(int u,int lt,int rt,int lq,int rq)
{
if(m[u]==1||m[u]==0)
return ;
if(lt==rt)
{
m[u]=tr[u]=sqrt(tr[u]);
return ;
}
long long mid=(lt+rt)>>1;
if(lq<=mid)
update_line_tree(u<<1,lt,mid,lq,rq);
if(mid<rq)
update_line_tree(u<<1|1,mid+1,rt,lq,rq);
tr[u]=tr[u<<1]+tr[u<<1|1];
m[u]=max(m[u<<1],m[u<<1|1]);
}
long long inline query_line_tree(int u,int lt,int rt,int lq,int rq)
{
long long sum=0;
if(lq<=lt&&rt<=rq)
return tr[u];
long long mid=(lt+rt)>>1;
if(lq<=mid)
sum+=query_line_tree(u<<1,lt,mid,lq,rq);
if(rq>mid)
sum+=query_line_tree(u<<1|1,mid+1,rt,lq,rq);
return sum;
}
signed main()
{
int n,q,i,c,k,b;
scanf("%lld",&n);
for(i=1;i<=n;++i)
scanf("%lld",&a[i]);
init_line_tree(1,1,n);
scanf("%lld",&q);
for(i=0;i<q;++i)
{
scanf("%lld %lld %lld",&k,&b,&c);
if(k==1)
{
printf("%lld\n",query_line_tree(1,1,n,b,c));
}
else
{
update_line_tree(1,1,n,b,c);
}
}
return 0;
}