#include<bits/stdc++.h>
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
using namespace std;
long long dis[100005];
int n,m,ant;
long long s1,s2,s3;
int ll[1000005];
int rr[1000005];
long long val[1000005];
bool qq[1000005];
inline long long read() {
long long kk= 0, zz = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') {
zz = -1;
}
ch = getchar();
}
while (ch>= '0' && ch <= '9') {
kk = (kk<< 1) + (kk << 3) + (ch ^ 48);
ch = getchar();
}
return kk * zz;
}
void jian(int q,int w,int e) {
ll[q] = w;
rr[q] = e;
if (w == e) {
val[q] = dis[++ant];
return;
}
int mid = (w + e) / 2;
jian(ls(q),w,mid);
jian(rs(q),mid + 1,e);
val[q] = val[ls(q)] + val[rs(q)];
}
long long cha(int now,int l,int r) {
if (ll[now] >= l && rr[now] <= r) {
return val[now];
}
long long s = 0;
int mid = (ll[now] + rr[now]) / 2;
if (l <= mid) s += cha(ls(now),l,r);
if (r > mid) s += cha(rs(now),l,r);
return s;
}
void add(int now,int l,int r) {
if (qq[now]) return;
if (ll[now] == rr[now]) {
val[now] = sqrt(val[now]);
if (val[now] < 1) qq[now] = true;
return;
}
int mid = (ll[now] + rr[now]) / 2;
if (mid >= l) add(ls(now),l,r);
if (r > mid) add(rs(now),l,r);
val[now] = val[ls(now)] + val[rs(now)];
qq[now] = (qq[ls(now)] && qq[rs(now)]);
}
int main() {
scanf("%d",&n);
for (int j = 1; j <= n; j++) {
dis[j] = read();
}
jian(1,1,n);
scanf("%d",&m);
for (int j = 1; j <= m; j++) {
s1 = read();
s2 = read();
s3 = read();
if (s2 > s3) {
swap(s2,s3);
}
if (s1 == 1) {
printf("%lld\n",cha(1,s2,s3));
}
else{
add(1,s2,s3);
}
}
return 0;
}