Buggy python submission (verdict: Time Limit Exceeded):
input = raw_input

M = 10 ** 9 + 7
n, a, b = map(int, input().split(" "))

from math import factorial

#def comb(n,k):
#  if n<0 or k<0 or n<k: return 0
#  if n==0 or k==0: return 1
#  a=factorial(n) %p
#  b=factorial(k) %p
#  c=factorial(n-k) %p
#  return (a*power_func(b,p-2,p)*power_func(c,p-2,p))%p
#
#def power_func(a,b,p):
#  return (a ** b) % p
  #if b==0: return 1
  #if b%2==0:
  #  d=power_func(a,b//2,p)
  #  return d*d %p
  #if b%2==1:
  #  return (a*power_func(a,b-1,p ))%p

def framod(n, mod, a=1):
    for i in range(1,n+1):
        a=a * i % mod
    return a

power_dict = {}
power_dict[(n, 0)] = 1

def power(n, r, mod):
    if r == 0: return 1
    if r%2 == 0:
        return power(n*n % mod, r//2, mod) % mod
    if r%2 == 1:
        return n * power(n, r-1, mod) % mod


def comb(n, k, mod):
    a=framod(n, mod)
    b=framod(k, mod)
    c=framod(n-k, mod)
    return (a * power(b, mod-2, mod) * power(c, mod-2, mod)) % mod

#if True:
if False:
    comb_dict = {}
    comb_dict[(1, 0)] = 1
    comb_dict[(1, 1)] = 1

    zenbu2 = 1
    for i in range(2, n+1):
        new_comb_dict = {}
        new_comb_dict[(i, 0)] = 1
        new_comb_dict[(i, i)] = 1
        for j in range(1, i):
            tmp = comb_dict[(i-1, j-1)] + comb_dict[(i-1, j)]
            tmp = tmp % M
            new_comb_dict[(i, j)] = tmp
            if i == n:
                zenbu2 += tmp

        comb_dict = new_comb_dict


#zenbu = 1
#for i in range(n):
#    zenbu = zenbu * 2
#    zenbu = zenbu % M
#
#    assert zenbu not in values, (i, zenbu)
#    values.append(zenbu)
zenbu = (2 ** n) % M - 1
#zenbu = zenbu2

out = zenbu - comb(n, a, M) - comb(n, b, M)
#out = zenbu - comb_dict[(n, a)] - comb_dict[(n, b)]
out = out % M
print(out)

Fixed submission:
input = raw_input

M = 10 ** 9 + 7
n, a, b = map(int, input().split(" "))

from math import factorial

def framod(n, mod, a=1):
    for i in range(1,n+1):
        a=a * i % mod
    return a

#power_dict = {}
# kurikaeshi jijouhou
def power(n, r, mod):
    if r == 0: return 1
    #try:
    #    ret = power_dict[(n, r)]
    #except:
    if True:
        if r%2 == 0:
            ret = power(n*n % mod, r//2, mod) % mod
        if r%2 == 1:
            ret = n * power(n, r-1, mod) % mod
        #power_dict[(n, r)] = ret
    return ret


def comb(n, k, mod):
    k = min(k, n-k)
    bunshi = 1
    bunbo = 1
    for i in range(k):
        bunshi = bunshi * (n-i)
        bunshi = bunshi % M
        bunbo = bunbo * (i+1)
        bunbo = bunbo % M

    ret = (bunshi * power(bunbo, mod-2, mod)) % mod
    #a=framod(n, mod)
    #b=framod(k, mod)
    #c=framod(n-k, mod)
    #return (a * power(b, mod-2, mod) * power(c, mod-2, mod)) % mod
    return ret

#if True:
if False:
    comb_dict = {}
    comb_dict[(1, 0)] = 1
    comb_dict[(1, 1)] = 1

    zenbu2 = 1
    for i in range(2, n+1):
        new_comb_dict = {}
        new_comb_dict[(i, 0)] = 1
        new_comb_dict[(i, i)] = 1
        for j in range(1, i):
            tmp = comb_dict[(i-1, j-1)] + comb_dict[(i-1, j)]
            tmp = tmp % M
            new_comb_dict[(i, j)] = tmp
            if i == n:
                zenbu2 += tmp

        comb_dict = new_comb_dict


#zenbu = 1
#for i in range(n):
#    zenbu = zenbu * 2
#    zenbu = zenbu % M
#
#    assert zenbu not in values, (i, zenbu)
#    values.append(zenbu)
#zenbu = zenbu2

#out = 0
#for i in range(1, n+1):
#    if i == a or i == b:
#        continue
#    tmp = comb(n, i, M)
#    out += tmp

zenbu = power(2, n, M) - 1
#print("zenbu", zenbu)
A = comb(n, a, M)
#print("A", A)
B = comb(n, b, M)
#print("B", B)

out = zenbu - A - B
#out = zenbu - comb_dict[(n, a)] - comb_dict[(n, b)]
out = out % M
print(out)