#include <bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
long long n,m,k,pos[maxn],a[maxn],book[maxn],sum[maxn],ans=0;
void sqdate(long long l,long long r){
for(int i=l;i<=min(pos[l]*k,r);i++)sum[pos[i]]-=a[i],a[i]=sqrt(a[i]),sum[pos[i]]+=a[i];
if(pos[l]==pos[r])return;
for(int i=(pos[r]-1)*k+1;i<=r;i++)sum[pos[i]]-=a[i],a[i]=sqrt(a[i]),sum[pos[i]]+=a[i];
for(int i=pos[l]+1;i<=pos[r]-1;i++){
if(book[i]==1)continue;
book[i]=1;sum[i]=0;
for(int j=(i-1)*k+1;j<=i*k;j++){
a[j]=sqrt(a[j]);sum[i]+=a[j];
if(a[j]>1)book[i]=0;
}
}
}
void print(long long l,long long r){
ans=0;
for(int i=l;i<=min(pos[l]*k,r);i++)ans+=a[i];
if(pos[l]==pos[r])return printf("%lld\n",ans),void();
for(int i=(pos[r]-1)*k+1;i<=r;i++)ans+=a[i];
for(int i=pos[l]+1;i<=pos[r]-1;i++)ans+=sum[i];
return printf("%lld\n",ans),void();
}
int main(){
cin>>n;
k=sqrt(n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]),pos[i]=(i-1)/k+1,sum[pos[i]]+=a[i];
long long opt,l,r;
cin>>m;
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&opt,&l,&r);
if (l>r)swap(l,r);
if(opt==0)sqdate(l,r);
else print(l,r);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int INF=1e5+10;
long long a[INF],pos[INF],tot[INF],num[INF];
bool used[INF];
long long opt,l,r;
long long k;
void update(){
if (l>r)swap(l,r);
for (int i=l;i<=min(r,pos[l]*k);i++){
tot[pos[l]]-=(a[i]-sqrt(a[i]));
a[i]=sqrt(a[i]);
if (a[i]==1&&!used[i])used[i]=true,num[pos[l]]--;
}
if (pos[l]==pos[r])return;
for (int i=(pos[r]-1)*k+1;i<=r;i++){
tot[pos[r]]-=(a[i]-sqrt(a[i]));
a[i]=sqrt(a[i]);
if (a[i]==1&&!used[i])used[i]=true,num[pos[r]]--;
}
for (int i=pos[l]+1;i<=pos[r]-1;i++){
if (num[i]<=0)continue;
for (int j=(i-1)*k+1;j<=i*k;j++){
tot[i]-=(a[j]-sqrt(a[j]));
a[j]=sqrt(a[j]);
if (a[j]==1&&!used[j])used[j]=true,num[i]--;
}
}
}
void print(){
if (l>r)swap(l,r);
long long ans=0;
for (int i=l;i<=min(r,pos[l]*k);i++){
ans+=a[i];
}
if (pos[l]==pos[r]){
cout<<ans<<endl;
return;
}
for (int i=(pos[r]-1)*k+1;i<=r;i++){
ans+=a[i];
}
for (int i=pos[l]+1;i<=pos[r]-1;i++){
ans+=tot[i];
}
cout<<ans<<endl;
return;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
long long n,m;
cin>>n;
k=sqrt(n);
for (int i=1;i<=n;i++){
cin>>a[i];
pos[i]=(i-1)/k+1;
tot[pos[i]]+=a[i];
if (a[i]!=1){
num[pos[i]]++;
}else {
used[i]=true;
}
}
cin>>m;
for (int i=1;i<=m;i++){
cin>>opt>>l>>r;
if (l>r)swap(l,r);
if (opt==0){
update();
}else {
print();
}
}
return 0;
}