RT
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<cctype>
#include<map>
#define re register int
#define il inline
#define Te template
#define ll long long
#define elif else if
#define N1 15
#define N2 105
#define N3 1005
#define N4 10005
#define N5 100005
#define N6 1000005
#define N7 10000005
#define N8 100000005
using namespace std;
Te <typename R> R read(R &x){
x=0;
char c=getchar();R f=1;
for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
return x=x*f;
}
Te <typename W> void write(W x){
if(x<0)x=(~x)|1,putchar('-');
if(x>9)write(x/10);
putchar((x-(x/10)*10)+48);
}
int n,m;
ll a[N5],b[N5];
int blk,cnt;
int main(){
freopen("P4145_2.in","r",stdin);
freopen("MY.out","w",stdout);
read(n);
blk=sqrt(n);
for(int i=1;i<=n;i++){
read(a[i]);
b[(i-1)/blk+1]+=a[i];
}
read(m);
for(;m--;){
int k;
read(k);
if(k==0){
int l,r;
read(l),read(r);
for(int i=l;i<=r;i+=blk){
cnt=(i-1)/blk+1;
if(b[cnt]==blk)continue;
for(int j=max(blk*(cnt-1)+1,l);j<=blk*cnt&&j<=r;j++){
ll ud=sqrt(a[j]);
b[cnt]-=a[j]-ud;
a[j]=ud;
}
}
}
if(k==1){
int l,r;
read(l),read(r);
ll ans=0;
for(int i=l;i<=r;i+=blk){
cnt=(i-1)/blk+1;
if(i==l){
for(int j=l;j<=cnt*blk&&j<=r;j++){
ans+=a[j];
}
continue;
}
if(r-i+1<=blk){
for(int j=(cnt-1)*blk+1;j<=r;j++){
ans+=a[j];
}
continue;
}
ans+=b[cnt];
}
printf("%lld\n",ans);
}
}
}