#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10;
int n,m;
LL tree[N*4],a[N];
bool vis[N];
void build(int x,int lf,int rt){
if(vis[x]) return;
if(lf==rt){
tree[x]=a[lf];
if(tree[x]<=1) vis[x]=true;
return;
}
int mid=lf+rt>>1;
build(x<<1,lf,mid);
build(x<<1|1,mid+1,rt);
tree[x]=tree[x<<1]+tree[x<<1|1];
if(vis[x<<1]&&vis[x<<1|1]) vis[x]=true;
}
void insert(int x,int lf,int rt,int a,int b){
if(vis[x]) return;
if(lf==rt){
tree[x]=sqrt(tree[x]);
if(tree[x]<=1) vis[x]=true;
return;
}
int mid=lf+rt>>1;
if(a<=mid) insert(x<<1,lf,mid,a,b);
if(b>mid) insert(x<<1|1,mid+1,rt,a,b);
tree[x]=tree[x<<1]+tree[x<<1|1];
if(vis[x<<1]&&vis[x<<1|1]) vis[x]=true;
}
LL query(int x,int lf,int rt,int a,int b){
if(lf>=a&&rt<=b) return tree[x];
LL sum=0;
int mid=lf+rt>>1;
if(a<=mid) sum+=query(x<<1,lf,mid,a,b);
if(b>mid) sum+=query(x<<1|1,mid+1,rt,a,b);
return sum;
}
int main(){
freopen("P4145.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
build(1,1,n);
scanf("%d",&m);
int op,l,r;
while(m--){
scanf("%d%d%d",&op,&l,&r);
if(l>r) swap(l,r);
if(op==0) insert(1,1,n,l,r);
else printf("%lld\n",query(1,1,n,l,r));
}
return 0;
}