#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
const int N=1e5+10;
int n,m;
int a[N];
struct node{
long long l,r,sum;
long long maxn;
}tr[N*4];
void pushup(int u){
tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;
tr[u].maxn=max(tr[u<<1].maxn,tr[u<<1|1].maxn);
}
void build(int u,int l,int r){
tr[u]={l,r};
if(l==r){
tr[u].maxn=tr[u].sum=a[l];
return;
}
int mid=l+r>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
void modify(int u,int l,int r){
if(tr[u].l==tr[u].r){
tr[u].sum=sqrt(tr[u].sum);
tr[u].maxn=sqrt(tr[u].maxn);
return;
}
int mid=(tr[u].l+tr[u].r)>>1;
if(l<=mid&&tr[u<<1].maxn>1)modify(u<<1,l,r);
if(r>mid&&tr[u<<1|1].maxn>1)modify(u<<1|1,l,r);
pushup(u);
}
long long query(int u,int l,int r){
if(tr[u].l>=l&&tr[u].r<=r){
return tr[u].sum;
}
int mid=(tr[u].r+tr[u].l)>>1;
long long v=0;
if(l<=mid)v+=query(u<<1,l,r);
if(r>mid)v+=query(u<<1|1,l,r);
return v;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,1,n);
cin>>m;
for(int i=1;i<=m;i++){
int op,l,r;
cin>>op>>l>>r;
if(l>r)swap(l,r);
if(op==0)modify(1,l,r);
if(op==1)cout<<query(1,l,r)<<endl;
}
return 0;
}