При нажатии на кнопку нужно просто редактировать сообщение, генерируя новую клавиатуру с нуля, но с галочкой на нужной кнопке. Вроде как можно даже только клавиатуру редактировать, через EditMessageReplyMarkup. Нужно только хранить где-то текущее состояние всех кнопок, чтобы сохранялись галочки на уже помеченных кнопках.
И да, присоединюсь к комментаторам, переделайте вывод через цикл.
P.S. Telegram bot api позволяет в reply_markup засунуть строку до 64 байт, так что вы повнимательнее, с таким количеством кнопок, лучше как-то урезать длину строки в callback_data каждой кнопки.