static bool IsPrime(int number)
if (number <= 1) return false;
if (number == 2) return true;
if (number % 2 == 0) return false;
var boundary = (int)Math.Floor(Math.Sqrt(number));
for (int i = 3; i <= boundary; i += 2)
static int MaxSum(int[][] triangle)
for (int i = triangle.Length - 2; i >= 0; i--)
for (int j = 0; j < triangle[i].Length; j++)
if (!IsPrime(triangle[i][j]))
triangle[i][j] += Math.Max(triangle[i + 1][j], triangle[i + 1][j + 1]);
public static void Main(string[] args)
string[] lines = File.ReadAllLines("./input.txt");
int[][] triangle = lines.Select(line => line.Split(' ').Select(int.Parse).ToArray()).ToArray();
Console.WriteLine(MaxSum(triangle));