#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,c;
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);
int 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;
}