//http://www.infoarena.ro/problema/fractal
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");
int k,x,y;
int rez(int k,int x,int y)
{
if(k==1)
return 0;
k/=2;
if(x<=k&&y<=k)
return rez(k,y,x);
else
if(x<=k)
{
return k*k+rez(k,x,y-k);
}
else
if(y<=k)
{
return k*k*3+rez(k,y-k,2*k-x+1);
}
else
{
return k*k*2+rez(k,x-k,y-k);
}
}
int main()
{
f>>k>>x>>y;
g<<rez(1<<k,x,y);
return 0;
}
//#include <iostream>
//using namespace std;
// int a[100],i,n;
//int main()
//{
// cout << "Dati n:";
// cin>>n;
// a[1]=0;a[2]=1;
// for(i=3;i<=n;i++)a[i]=a[i-1]+a[i-2];
// cout<<"termenul n a lui Fibonacci este:"<<a[n];
// return 0;
//}
//#include <iostream>
//using namespace std;
// int x,y,rest;
//int main()
//{
// cout << "Dati doua nr x si y:";
// cin>>x>>y;
// do{
// rest=x%y;
// x=y;
// y=rest;
// }while (rest!=0);
// cout<<"cmmdc a nr x si y este:"<<x;
// return 0;
//}
//#include <fstream>
//using namespace std;
//ifstream fi("bete1.in");
//ofstream fo("bete1.out");
//int i,n,a[1003],b[1003],m,s,maxi1,maxi2,t,k;
//int main()
//{
// fi>>n;
// for(i=1;i<=n;i++)fi>>a[i];
// for(i=1;i<=n;i++)fi>>b[i];
// for(i=1;i<=n;i++)s+=a[i]+b[i];
// m=s/n;
// for(i=1;i<=n;i++)
// if(maxi1<a[i])maxi1=a[i];
// for(i=1;i<=n;i++)
// if(maxi2<b[i])maxi2=b[i];
// for(i=1;i<=n;i++)
// if(maxi1==a[i])k++;
// for(i=1;i<=n;i++)
// if(maxi2==b[i])t++;
// fo<<m<<endl;
// fo<<maxi1+maxi2<<endl;
// if(t<k)fo<<t;
// else fo<<k;
// return 0;
//}
////insertie
//#include <iostream>
//#include<cstring>
//using namespace std;
//int i,n,k,a,b,nr;
//int main()
//{
// cin>>a>>b;
//// for(i=a;i<=b;i++)
//// if(i%2==0)k++;
//// cout<<k;
//// //--------
// if(a%2==1 && b%2==1)nr=(b-a)/2;
// else nr=(b-a)/2+1;
// cout<<endl<<nr;
// return 0;
//}
////insertie
//#include <fstream>
//using namespace std;
//ifstream f("sir.in");
//ofstream g("sir.out");
//int a[100],i,k,aux,n,x,fr[100];
//int main()
//{
//// for(i=1;i<=n;i++){
//// k=i;
//// while(k>1&
//// &a[k-1]>a[k]){
//// swap(a[k],a[k-1]);
//// k--;
//// }
//// }
// f>>n;
// for(i=1;i<=n;i++) f>>a[i];
// for(i=1;i<=n;i++){
// aux=a[i];
// k=i;
// while(k>1&&a[k-1]>aux){a[k]=a[k-1];
// k--;
// }
// a[k]=aux;
// }
// for(i=1;i<=n;i++)g<<a[i]<<" ";
// return 0;
//}
////selectia directa
//#include <fstream>
//using namespace std;
//ifstream f("sir.in");
//ofstream g("sir.out");
//int a[100],i,k,aux,n,x,j,mini;
//int main()
//{
//
// f>>n;
// for(i=1;i<=n;i++) f>>a[i];
// for(i=1;i<=n;i++){
// mini=a[i];k=i;
// for(j=i+1;j<=n;j++)
// if(a[j]<mini){mini=a[j];k=j;}
// swap(a[i],a[k]);
// }
// for(i=1;i<=n;i++)g<<a[i]<<" ";
// return 0;
//}
//ordonare prin numarare
//#include <fstream>
//using namespace std;
//ifstream f("sir.in");
//ofstream g("sir.out");
//int a[100],b[100],k[100],i,aux,n,x,j,mini;
//int main()
//{
//
// f>>n;
// for(i=1;i<=n;i++) f>>a[i];
// for(i=1;i<=n;i++)
// for(j=i+1;j<=n;j++)
// if(a[i]>a[j])k[i]++;
// else k[j]++;
// for(i=1;i<=n;i++)b[k[i]+1]=a[i];
// for(i=1;i<=n;i++)g<<b[i]<<" ";
// return 0;
//}