#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<algorithm>
using namespace std;
long long int A[1001000], B[1001000][3];
char infile[100], outfile[100];


long long int a, b, n;
long long int g(long long int c){
    long long int i;
    for(i=0;i<=n+1;i++) B[i][0]=B[i][1]=B[i][2]=0;
    for(i=n;i>0;i--){
        if(A[i]%c==0){
            B[i][0]= B[i+1][0];
            B[i][1]= min(B[i+1][1],B[i+1][0])+a;
            B[i][2]= min(B[i+1][2],B[i+1][1]);
        }else if((A[i]-1)%c==0 || (A[i]+1)%c==0){
            B[i][0]= B[i+1][0] + b;
            B[i][1]= min(B[i+1][1],B[i+1][0])+a;
            B[i][2]= min(B[i+1][2],B[i+1][1])+b;
        }else{
            B[i][0]= n * (a+b);
            B[i][1]= min(B[i+1][1],B[i+1][0])+a;
            B[i][2]= n * (a+b);
        }
    }
    return min(B[1][0],min(B[1][1],B[1][2]));
}
long long int f(long long int c){
    long long int i=2, m = n * (a+b);
    while(i*i<=c){
        if(c%i==0){
            m = min(m, g(i));
            while(c%i==0){
                c = c/i;
            }
            //printf("%lld %lld\n",i,m);
        }
        i++;
    }
    if(c>1) m = min(m, g(c));
    //printf("%lld %lld\n",c,m);
    return m;
}
int main(){
    long long int i, m, I;
    srand(time(NULL));
    for(I=21;I<=25;I++){
	    sprintf(infile, ".%d.in", I);
		freopen(infile, "w", stdout);
		scanf("%lld %lld %lld",&n, &a, &b);
		printf("%lld %lld %lld\n",n,a,b);
	    m = n*(a+b); 
	    for(i=1;i<=n;i++){
	    	A[i]= 1000000000- rand()%1000;
			//scanf("%lld",A+i);
	    	printf("%lld ",A[i]);
		} 	      
	    for(i=-1;i<=1;i++) m = min(m,f(A[1]-i));
	    for(i=-1;i<=1;i++) m = min(m,f(A[n]-i));
	    sprintf(outfile, ".%d.out", I);
        freopen(outfile, "w", stdout);
	    printf("%lld",m);
	}
}

