I think you can add the following expression as a trigger condition: or(equals(and(and(not(equals(dayOfWeek(utcNow()),0)),not(equals(dayOfWeek(utcNow()),6))), equals(int(formatDateTime(utcNow(),'dd')), 15)), and(equals(dayOfWeek(utcNow()),1), or(equals(int(formatDateTime(utcNow(),'dd')), 16), equals(int(formatDateTime(utcNow(),'dd')), 17))), true)
It checks to see if the current day of the month is the 15th and that it is not a weekend (0 and 6). It then checks if it is a Monday and the date of the month is either the 16th or 17, which would be the next valid day the flow could run based on your criteria.
It will thus either return true if the day of the month is the 15th and not a Saturday or Sunday. Or it will return true if the day of the week is a Monday (1) and it is either the 16th or 17th of the month. Since it will only return true on one of those three days, this should work.
Adjust as needed and schedule your flow to run every day.