#include <bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define lson k*2
#define rson k*2+1
#define inf 2000000000
#define ldb long double
#define db double
#define ft float
#define myset(a,b,c,d) for(int i=b;i<=c;i++)a[i]=d;
using namespace std;
int a[100005];
int n;
int c[100005];
int lowbit(int x)
{
return x&(-x);
}
int find(int k)
{
if(!k)return 0;
return c[k]+find(k-lowbit(k));
}
void change(int k,int x)
{
if(k>n)return ;
c[k]+=x;
change(k+lowbit(k),x);
}
void init()
{
for(int i=2;i<=n;i++)
{
c[i]=find(i-1)+a[i]-find(i-lowbit(i));
}
}
set<int> st;
signed main()
{
// freopen("data1.txt","r",stdin);
// freopen("data1.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
if(a[i]>1)st.insert(i);
}
c[1]=a[1];
init();
int m;
cin>>m;
while(m--)
{
int k,l,r;
scanf("%lld%lld%lld",&k,&l,&r);
if(k==0)
{
set<int>::iterator itl=st.lower_bound(l);
set<int>::iterator itr=(--st.upper_bound(r));
// cout<<*itl<<' '<<*itr<<endl;
vector<int> v;
for(;;itl++)
{
// cout<<*itl<<' '<<*itr<<endl;
int last=a[*itl],now=sqrt(a[*itl]);
change(*itl,now-last);
if(now<=1)v.push_back(*itl);
a[*itl]=now;
if(itl==itr)break;
}
for(int i=0;i<v.size();i++)
{
st.erase(st.find(v[i]));
}
}
else
{
printf("%lld\n",find(r)-find(l-1));
}
// for(int i=1;i<=n*4;i++)
// {
// printf("[%lld,%lld]=%lld\n",t[i].l,t[i].r,t[i].sum);
// }
}
return 0;
}