#define _CRT_SECURE_NO_WARNINGS
#include<string.h>
#include<iostream>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
//A - 质数的最大乘积 
int isprime_number(int num)
{
	if (num == 1)
		return true;
	for (int i = 2; i < num; ++i)
	{
		if (num%i == 0)
			return false;
	}
	return true;
}



//两个质数的和是S，它们的积最大是多少?
int mainA()
{
	int num = 0;
	scanf("%d", &num);


	int maxprimenum = 0;
	int s1 = 0;
	int s2 = num;
	for (; s2 >= s1; ++s1, --s2)
	{
		if (!isprime_number(s1) || !isprime_number(s2))
			continue;
		if(s2+s1== num)
			maxprimenum = s2 * s1 > maxprimenum ? s2 * s1 : maxprimenum;
	}
	cout << maxprimenum<<endl;
	return 0;
}


/*
Alice从市场上买了N根竹竿，每根竹竿都以“节”为单位。这些竹竿中最短的有A节，最长的有B节，其余竹竿各有长短，每根竿的节数也必定在[A,B]范围内。现在Alice希望将这些竹竿用连接部件全部接成一根长竹竿。连接部件的长度忽略不计，请你输出连接后的长竹竿共可能有多少种不同节数。
数据不合理或组合不出结果时输出0
*/


int main()
{
	int count = 0,min = 0,max=0;

	scanf("%d %d %d", &count, &min, &max);

	if (min > max)
	{
		cout << 0 << endl;
		return 0;
	}

	if (count == 1&& min!=max)
	{
		cout << 0 << endl;
		return 0;
	}



	set<int> resultnum;

	vector<int> allnum;
	for (int i = min; i <= max; i++)
	{
		allnum.push_back(i);
	}

	
	for (int i = 0; i < 100000; ++i)
	{
		
		int sum = allnum[0] + allnum[allnum.size() - 1];
		for (int j = 0; j <count-2;j++ )
		{
			int randomnum = rand() % allnum.size();
			sum += allnum[randomnum];
		}
		resultnum.insert(sum);
	}


	cout << resultnum.size();
	return 0;
}