// Original C++ solution (slower):
#include<bits/stdc++.h>

using namespace std;



#define rep(i,n) for(int i=0;i<n;i++)

#define REP(i,s,n) for(int i=(s);i<=(n);i++)

#define repr(i,n) for(int i=n-1;i>=0;i--)

#define REPR(i,s,n) for(int i=(s);i>=(n);i--)

#define all(a) (a).begin(),(a).end()

#define rall(a) (a).rbegin(),(a).rend()

#define Eunique(v) v.erase(unique(all(v)),v.end())

#define Eback(s) s.erase(s.end()-1,s.end())

#define rev(v) reverse(all(v))

#define minvec(v) *min_element(all(v))

#define maxvec(v) *max_element(all(v))

#define sumvec(v) accumulate(all(v),0)

#define mapmax(v) v.rbegin()->first

#define mapmin(v) v.begin()->first

#define pb push_back

#define pf push_front

#define m_p make_pair

#define DOUBLE fixed << setprecision(15)

#define OK puts("OK")

#define OK1 puts("OK1")

#define OK2 puts("OK2")

#define SIZE(s) (int)s.size()

#define INF ((1LL<<62)-(1LL<<31))

#define zero(x,n) setw(x) << setfill('0') << n



typedef long long ll;



typedef vector<int> vi;

typedef vector<vi> vvi;

typedef vector<long long> vll;

typedef vector<vll> vvll;

typedef vector<double> vd;

typedef vector<vd> vvd;

typedef vector<char> vc;

typedef vector<vc> vvc;

typedef vector<bool> vb;

typedef vector<vb> vvb;

typedef vector<string> vs;



typedef pair<ll,ll> pll;

typedef pair<int,int> pii;

typedef vector<pair<int,int>> vpii;

typedef vector<pair<ll,ll>> vpll;



const double pi = acos(-1.0);

const int mod=1000000007;

const int mod2=998244353;



template<class A, class B>

ostream& operator<<(ostream& ost, const pair<A, B>&p) {

	ost << "{" << p.first << ", " << p.second << "} ";

	return ost;

}



template<class T>

ostream& operator<<(ostream& ost, const vector<T>&v) {

	ost << "{";

	for (int i = 0; i<(int)v.size(); i++) {

		if (i)ost << " ";

		ost << v[i];

	}

	ost << "} \n";

	return ost;

}



template<class A, class B>

ostream& operator<<(ostream& ost, const map<A, B>&v) {

	ost << "{";

	for (auto p:v) {

		ost << "{" << p.first << ", " << p.second << "} ";

	}

	ost << "} ";

	return ost;

}



template<class T>

inline bool chmax(T& a, T b){if(a<b){a=b;return true;} return false;}



template<class T>

inline bool chmin(T& a, T b){if(a>b){a=b;return true;} return false;}



void YES(bool b) {cout << (b?"YES\n":"NO\n");}

void Yes(bool b) {cout << (b?"Yes\n":"No\n");}

void yes(bool b) {cout << (b?"yes\n":"no\n");}

void Yay(bool b) {cout << (b?"Yay!\n":":(\n");}



ll gcd(ll x, ll y) {return __gcd(x,y);}

ll lcm(ll x, ll y) {return x/__gcd(x,y)*y;}



struct mint {

    ll x;

    mint(ll x=0):x((x%mod+mod)%mod) {}

    mint operator-() const {return mint(-x);}

    mint& operator+=(const mint a) {

        if((x+=a.x)>=mod) x-=mod;

        return *this;

    }

    mint& operator-=(const mint a) {

        if((x+=mod-a.x)>=mod) x-=mod;

        return *this;

    }

    mint& operator*=(const mint a) {(x*=a.x)%=mod; return *this;}

    mint operator+(const mint a) const {return mint(*this)+=a;}

    mint operator-(const mint a) const {return mint(*this)-=a;}

    mint operator*(const mint a) const {return mint(*this)*=a;}

    mint pow(ll t) const {

        if(!t) return 1;

        mint a=pow(t>>1);

        a*=a;

        if(t&1) a*=*this;

        return a;

    }



    //for prime mod

    mint inv() const {return pow(mod-2);}

    mint& operator/=(const mint a) {return *this*=a.inv();}

    mint operator/(const mint a) const {return mint(*this)/=a;}

};

istream& operator>>(istream& is, const mint& a) {return is>>a.x;}

ostream& operator<<(ostream& os, const mint& a) {return os<<a.x;}



mint nCr(ll n,ll r){

	mint x=1,y=1;

	rep(i,r){

		x*=n-i;

		y*=i+1;

	}

	return x/y;

}



int main()

{

	ll n,a,b;

	cin >> n >> a >> b;

	mint ans=mint(2).pow(n);

	ans-=1;

	ans-=nCr(n,a);

	ans-=nCr(n,b);

	cout << ans.x << endl;

	return 0;

}


// Optimized solution to the same problem (faster):
#include<bits/stdc++.h>

using namespace std;



#define rep(i,n) for(int i=0;i<n;i++)

#define REP(i,s,n) for(int i=(s);i<=(n);i++)

#define repr(i,n) for(int i=n-1;i>=0;i--)

#define REPR(i,s,n) for(int i=(s);i>=(n);i--)

#define all(a) (a).begin(),(a).end()

#define rall(a) (a).rbegin(),(a).rend()

#define Eunique(v) v.erase(unique(all(v)),v.end())

#define Eback(s) s.erase(s.end()-1,s.end())

#define rev(v) reverse(all(v))

#define minvec(v) *min_element(all(v))

#define maxvec(v) *max_element(all(v))

#define sumvec(v) accumulate(all(v),0)

#define mapmax(v) v.rbegin()->first

#define mapmin(v) v.begin()->first

#define pb push_back

#define pf push_front

#define m_p make_pair

#define DOUBLE fixed << setprecision(15)

#define OK puts("OK")

#define OK1 puts("OK1")

#define OK2 puts("OK2")

#define SIZE(s) (int)s.size()

#define INF ((1LL<<62)-(1LL<<31))

#define zero(x,n) setw(x) << setfill('0') << n



typedef long long ll;



typedef vector<int> vi;

typedef vector<vi> vvi;

typedef vector<long long> vll;

typedef vector<vll> vvll;

typedef vector<double> vd;

typedef vector<vd> vvd;

typedef vector<char> vc;

typedef vector<vc> vvc;

typedef vector<bool> vb;

typedef vector<vb> vvb;

typedef vector<string> vs;



typedef pair<ll,ll> pll;

typedef pair<int,int> pii;

typedef vector<pair<int,int>> vpii;

typedef vector<pair<ll,ll>> vpll;



const double pi = acos(-1.0);

const int mod=1000000007;

const int mod2=998244353;



template<class A, class B>

ostream& operator<<(ostream& ost, const pair<A, B>&p) {

	ost << "{" << p.first << ", " << p.second << "} ";

	return ost;

}



template<class T>

ostream& operator<<(ostream& ost, const vector<T>&v) {

	ost << "{";

	for (int i = 0; i<(int)v.size(); i++) {

		if (i)ost << " ";

		ost << v[i];

	}

	ost << "} \n";

	return ost;

}



template<class A, class B>

ostream& operator<<(ostream& ost, const map<A, B>&v) {

	ost << "{";

	for (auto p:v) {

		ost << "{" << p.first << ", " << p.second << "} ";

	}

	ost << "} ";

	return ost;

}



template<class T>

inline bool chmax(T& a, T b){if(a<b){a=b;return true;} return false;}



template<class T>

inline bool chmin(T& a, T b){if(a>b){a=b;return true;} return false;}



void YES(bool b) {cout << (b?"YES\n":"NO\n");}

void Yes(bool b) {cout << (b?"Yes\n":"No\n");}

void yes(bool b) {cout << (b?"yes\n":"no\n");}

void Yay(bool b) {cout << (b?"Yay!\n":":(\n");}



ll gcd(ll x, ll y) {return __gcd(x,y);}

ll lcm(ll x, ll y) {return x/__gcd(x,y)*y;}



long long powmod(long long a,long long b){

    long long c=1;

    while(b){

        if(b&1) c=a*c%mod;

        a=a*a%mod;

        b>>=1;

    }

    return c;

}



ll nCr(ll n,ll r){

	ll x=1,y=1;

	rep(i,r){

		x=x*(n-i)%mod;

		y=y*(i+1)%mod;

	}

	return x*powmod(y,mod-2)%mod;

}



int main()

{

	ll n,a,b,ans=0;

	cin >> n >> a >> b;

	ans=powmod(2,n)-1-nCr(n,a)-nCr(n,b);

	cout << (ans%mod+mod)%mod << endl;

	return 0;

}


// Fastest known solution for this problem: