#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pi (4*atan(1.0))
const int N=5e5+10,M=4e6+10,inf=1e9+10;
ll sum[N<<2];
ll maxx[N<<2];
ll getnum(ll x)
{
    return (ll)sqrt(x);
}
void pushup(int pos)
{
    sum[pos]=sum[pos<<1]+sum[pos<<1|1];
    maxx[pos]=max(maxx[pos<<1],maxx[pos<<1|1]);
}
void build(int l,int r,int pos)
{
    if(l==r)
    {
        scanf("%lld",&sum[pos]);
        maxx[pos]=sum[pos];
        return;
    }
    int mid=(l+r)>>1;
    build(l,mid,pos<<1);
    build(mid+1,r,pos<<1|1);
    pushup(pos);
}
void update(int L,int R,int l,int r,int pos)
{
    if(l==r)
    {
        sum[pos]=getnum(sum[pos]);
        maxx[pos]=sum[pos];
        return;
    }
    int mid=(l+r)>>1;
    if(L<=mid&&maxx[pos<<1]>1)
    update(L,R,l,mid,pos<<1);
    if(R>mid&&maxx[pos<<1|1]>1)
    update(L,R,mid+1,r,pos<<1|1);
    pushup(pos);
}
ll query(int L,int R,int l,int r,int pos)
{
    if(L<=l&&r<=R)
    return sum[pos];
    int mid=(l+r)>>1;
    ll ans=0;
    if(L<=mid)
    ans+=query(L,R,l,mid,pos<<1);
    if(R>mid)
    ans+=query(L,R,mid+1,r,pos<<1|1);
    return ans;
}
int main()
{
    int n,m,i;
    scanf("%d",&n);
    build(1,n,1);
    scanf("%d",&m);
    while(m--)
    {
        int k,l,r;
        scanf("%d%d%d",&k,&l,&r);
        if(l>r)swap(l,r);
        if(k==0)
        update(l,r,1,n,1);
        else
        printf("%lld\n",query(l,r,1,n,1));
    }
    return 0;
}